Как загрузить файл с моего веб-сервера на рабочий стол? - PullRequest
3 голосов
/ 13 февраля 2012

Я искал интернет в течение 3 часов, чтобы найти решение своей проблемы, и я начинаю задумываться, не сталкивался ли кто-нибудь еще с этой проблемой?

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

Ну, это не удается загрузить файл из того, что я могу догадаться как ошибка прав доступа. Я искал решение, но не могу найти его. Я очень мало знаю об IIS7, поэтому не очень разбираюсь в том, что такое удостоверение пула приложений, хотя мне удалось предоставить полный доступ для этого удостоверения файлу / папкам. В любом случае, вот конкретная область, в которой он портит ..

Это часть страницы default.cshtml, которая вызывает функцию из файла .cs: // ну .. довольно близко к точной вещи, просто избавился от кучки ненужного хлама

@{
string tmp = Functions.downloadFile(fileName)
}

<html>
tmp
</html>

Это часть файла .cs, которая фактически загружает файл на рабочий стол

public static string downloadFile(string fileName) //i know this example doesnt 
//use filename, but the original code does.
{
    if (Directory.Exists("C:\WebSite\thingsToDownload"))
    {
        string[] files = Directory.GetFiles("C:\WebSite\thingsToDownload");

        foreach (string s in files)
        {
            string[] tmp = s.Split('\\');
            try
            {
                File.Copy(s,
                          Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
                          + "\\" + tmp[tmp.Length - 1]);
            }
            catch (Exception e)
            {
                return "ERROR COPYING: " + e.Message;
            }
        }
        return "GOOD";
    }
    return "DIRECTORY DOESNT EXIST";
}

После того, как все это сказано и сделано, я получаю «ОШИБКА КОПИРОВАНИЯ: Доступ к пути« \ fileName »запрещен.

Полагаю, веб-сервер не имеет доступа к рабочему столу человека, чтобы поместить туда файлы. Если кто-нибудь сможет пролить немного света и помочь мне получить это, это было бы очень признательно!

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

Если вы хотите скачать файл, нажав на ссылку, вы должны использовать ответ.

Вот пример, который вы можете использовать, например, когда пользователь нажимает на ссылку, кнопку или что-то еще:

  const string fName = @"C:\picture.bmp";
  FileInfo fi = new FileInfo(fName);
  long sz = fi.Length;

  Response.ClearContent();
  Response.ContentType = Path.GetExtension(fName);
  Response.AddHeader("Content-Disposition", string.Format("attachment; filename = {0}",System.IO.Path.GetFileName(fName)));
  Response.AddHeader("Content-Length", sz.ToString("F0"));
  Response.TransmitFile(fName);
  Response.End();
1 голос
/ 13 февраля 2012

Он работал, когда вы его разрабатывали, потому что он работал на вашем компьютере и, таким образом, имел доступ к вашему рабочему столу. загрузка на рабочий стол отсутствует. Вы можете обслуживать файлы и позволить пользователю решать, где сохранить файл; на рабочем столе или в другом месте. Но вы должны делать это через http, а не напрямую с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...