WebClient DownloadFile — доступ запрещен или не удалось найти часть пути

Я пытаюсь установить кнопку, чтобы пользователь мог загрузить файл, сохраненный на сервере.

protected void btnDownloadHtmlFile_Click(object sender, EventArgs e)
{
    string path = @"D:\web\mytestwebsite.com\www\temp\test.html";
    if (!File.Exists(path))
    {
        File.Create(path);
    }

    TextWriter tw = new StreamWriter(path);
    tw.WriteLine("<head></head><body>test</body>");
    tw.Close();

    WebClient webclient = new WebClient();
    webclient.DownloadFile(@"D:\web\mytestwebsite.com\www\temp\test.html", @"C:\web\test.html");
}

Это приводит к Could not find a part of the path 'C:\web\test.html'. То же самое, если я меняю на

 webclient.DownloadFile(new Uri("http://mytestwebsite.com/temp/test.html"), @"C:\web\test.html");

Если я изменюсь на

webclient.DownloadFile(@"D:\web\mytestwebsite.com\www\temp\test.html", "test.html");

or

webclient.DownloadFile(new Uri("http://mytestwebsite.com/temp/test.html"), "test.html");

Я получаю доступ к пути "C:\Windows\SysWOW64\inetsrv\test.html" запрещен.

Наконец, я зашел в папку C:\Windows\SysWOW64\inetsrv, чтобы дать разрешения СЕТЕВОЙ СЛУЖБЕ, но там написано, что доступ запрещен. Я зарегистрирован как администратор на сервере.

Я прочитал несколько сообщений об этом, но, похоже, ничего не работает или я что-то пропустил.

Как правильно использовать WebcClient.DownloadFile?


person Greg    schedule 22.10.2014    source источник
comment
Во-первых, почему вам нужно создать файл на сервере и снова сохранить его на сервере?   -  person Arindam Nayak    schedule 22.10.2014


Ответы (1)


Вбил мне в голову твою проблему. Если вы использовали webclient.DownloadFile(new Uri("http://mytestwebsite.com/temp/test.html"), @"C:\web\test.html");, убедитесь, что у вас есть каталог web в C:\. Я имею в виду, убедитесь, что в вашей файловой системе есть C:\web. Иначе выдаст ошибку. Потому что ему нужен каталог, чтобы он мог просто создать новый файл.

Когда вы сделали webclient.DownloadFile(@"D:\web\mytestwebsite.com\www\temp\test.html", "test.html");, он попытался создать файл в текущей области выполнения файла, то есть C:\Windows\SysWOW64\inetsrv\, и там он попытался создать файл, из-за разрешения на доступ он не может создать файл там.

Решение, попробуйте использовать следующий код, он должен создать файл в D:\web.

webclient.DownloadFile(new Uri("http://mytestwebsite.com/temp/test.html"), @"D:\web\test.html");

ИЗМЕНИТЬ

Отказ от ответственности Вы делаете это неправильно (если я не совсем понимаю требование), DownloadFile нужно загрузить URL-адрес на сервер, теперь есть точка для загрузки локального файла и сохранения его снова в локальном местоположении, это как файл save as в любое другое место.

ИЗМЕНИТЬ

Чтобы разрешить конечному пользователю загружать файл, используйте следующий код.

Response.Clear();
Response.ContentType = "text/html";
Response.AddHeader("Content-Disposition", "attachment;filename=a.html"); // replace a.html with your filename
Response.WriteFile(@"D:\webfile\a.html"); //use your file path here.
Response.Flush();
Response.End();
person Arindam Nayak    schedule 22.10.2014
comment
Неправильное использование файла webclient.downloadfile — файл загружается в локальный файл на сервере, а не в клиенте. - person Swomble; 22.10.2014
comment
Но согласно требованию OP, это решит задачу и загрузится на сервер, нужен ли OP? - person Arindam Nayak; 22.10.2014
comment
Они хотят загрузить файл, сохраненный на сервере - person Swomble; 22.10.2014
comment
Если вы посмотрите на код OP, файл создается на сервере и снова сохраняется на сервере, есть ли смысл это делать? Я имею в виду, может быть, ему нужно знать DownloadFile использование на экспериментальной основе. - person Arindam Nayak; 22.10.2014
comment
Если вы посмотрите на код OP, они пытаются загрузить файл со своего тестового веб-сайта и сохранить его на диск C - следовательно, загрузка файла клиенту - DownloadFile этого не сделает. Почему бы нам не позволить ОП уточнить вместо того, чтобы гадать? - person Swomble; 22.10.2014
comment
@ArindamNayak У меня есть папка C:\web. Допустим, я хочу, как пользователь, загрузить файл с моего веб-сайта. Разве я не должен видеть окно из браузера с вопросом, куда его сохранить или сохранить в папке по умолчанию, установленной в браузере? Да, файл создается и сохраняется на сервере автоматически. Затем пользователь получает этот файл в качестве загрузки. - person Greg; 22.10.2014
comment
@Greg, ты хочешь добиться этого - end user will be able to download the file from your server? - person Arindam Nayak; 22.10.2014
comment
@ArindamNayak Вот оно, response.writeFile. Значит, файл webclient.downloadfile вообще не предназначен для этой цели? Спасибо! - person Greg; 22.10.2014
comment
@Greg, downloadfile, чтобы загрузить URL-адрес, содержащий mp3, видео, html-контент, на ваш сервер, вы делали это неправильно. - person Arindam Nayak; 22.10.2014