скачать файл с сервера asp.net - PullRequest
1 голос
/ 05 января 2010

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

У меня есть код из сети, который должен работать, но не работает

     protected void Button4_Click(object sender, EventArgs e)
    {
     //To Get the physical Path of the file(test.txt)
    string filepath = Server.MapPath("test.txt");

    // Create New instance of FileInfo class to get the properties of the file being downloaded
   FileInfo myfile = new FileInfo(filepath);

   // Checking if file exists
   if (myfile.Exists)
   {
   // Clear the content of the response
   Response.ClearContent();

// Add the file name and attachment, which will force the open/cancel/save dialog box to show, to the header
Response.AddHeader("Content-Disposition", "attachment; filename=" + myfile.Name);

// Add the file size into the response header
Response.AddHeader("Content-Length", myfile.Length.ToString());

// Set the ContentType
Response.ContentType = ReturnExtension(myfile.Extension.ToLower());

// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
Response.TransmitFile(myfile.FullName);

// End the response
Response.End();
  }

    }

    private string ReturnExtension(string fileExtension)
    {
        switch (fileExtension)
        {
            case ".htm":
            case ".html":
            case ".log":
                return "text/HTML";
            case ".txt":
                return "text/plain";
            case ".doc":
                return "application/ms-word";
            case ".tiff":
            case ".tif":
                return "image/tiff";
            case ".asf":
                return "video/x-ms-asf";
            case ".avi":
                return "video/avi";
            case ".zip":
                return "application/zip";
            case ".xls":
            case ".csv":
                return "application/vnd.ms-excel";
            case ".gif":
                return "image/gif";
            case ".jpg":
            case "jpeg":
                return "image/jpeg";
            case ".bmp":
                return "image/bmp";
            case ".wav":
                return "audio/wav";
            case ".mp3":
                return "audio/mpeg3";
            case ".mpg":
            case "mpeg":
                return "video/mpeg";
            case ".rtf":
                return "application/rtf";
            case ".asp":
                return "text/asp";
            case ".pdf":
                return "application/pdf";
            case ".fdf":
                return "application/vnd.fdf";
            case ".ppt":
                return "application/mspowerpoint";
            case ".dwg":
                return "image/vnd.dwg";
            case ".msg":
                return "application/msoutlook";
            case ".xml":
            case ".sdxl":
                return "application/xml";
            case ".xdp":
                return "application/vnd.adobe.xdp+xml";
            default:
                return "application/octet-stream";
        }
    }

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

У меня есть test.txt на рабочем столе сервера ... опция сохранения файла также не доступна на стороне клиента ..

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

любые предложения ... пожалуйста, помогите

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

??

Ответы [ 4 ]

6 голосов
/ 20 октября 2011

Запись при нажатии кнопки, на которой вы хотите скачать файлы

protected void Button1_Click(object sender, EventArgs e)

 {

        string allowedExtensions = ".mp4,.pdf,.m4v,.gif,.jpg,.png,.swf,.css,.htm,.html,.txt";
        // edit this list to allow file types - do not allow sensitive file types like .cs or .config

        string fileName = "Images/apple.jpg";
        string filePath = "";

        //if (Request.QueryString["file"] != null) fileName = Request.QueryString["file"].ToString();
        //if (Request.QueryString["path"] != null) filePath = Request.QueryString["path"].ToString();

        if (fileName != "" && fileName.IndexOf(".") > 0)
        {
            bool extensionAllowed = false;
            // get file extension
            string fileExtension = fileName.Substring(fileName.LastIndexOf('.'), fileName.Length - fileName.LastIndexOf('.'));

            // check that we are allowed to download this file extension
            string[] extensions = allowedExtensions.Split(',');
            for (int a = 0; a < extensions.Length; a++)
            {
                if (extensions[a] == fileExtension)
                {
                    extensionAllowed = true;
                    break;
                }
            }

            if (extensionAllowed)
            {
                // check to see that the file exists 
                if (File.Exists(Server.MapPath(filePath + '/' + fileName)))
                {

                    // for iphones and ipads, this script can cause problems - especially when trying to view videos, so we will redirect to file if on iphone/ipad
                   // if (Request.UserAgent.ToLower().Contains("iphone") || Request.UserAgent.ToLower().Contains("ipad")) { Response.Redirect(filePath + '/' + fileName); }
                    Response.Clear();
                    Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
                    Response.WriteFile(Server.MapPath(filePath + '/' + fileName));
                    Response.End();
                }
                else
                {
                    litMessage.Text = "File could not be found";
                }
            }
            else
            {
                litMessage.Text = "File extension is not allowed";
            }
        }
        else
        {
            litMessage.Text = "Error - no file to download";
        }
    }
4 голосов
/ 06 января 2010

Вы упоминаете, что test.txt находится на рабочем столе сервера. Он также расположен рядом со страницей, которую вы тестируете? Попробуйте либо полностью указать путь к рабочему столу («C: \ Documents and Settings \ JohnDoe \ Desktop \ test.txt»), либо скопировать файл, чтобы он находился рядом со страницей .aspx.

0 голосов
/ 08 ноября 2012

Вы можете изменить папку на ваше местоположение:

Directory.SetCurrentDirectory(HttpContext.Current.Server.MapPath("~ your path in here")
0 голосов
/ 06 января 2010

хорошо, поэтому я поставил Response.Write после

 string filepath = Server.MapPath("test.txt");

и обнаружил, что путь к файлу указывает на папку inetpub ... поэтому, когда я помещаю test.txt в эту папку, он работает ... так что программа работает правильно.

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

Хорошо, я получил ответ и для любого пути

Я удаляю server.mappath и помещаю вместо него полное местоположение .. Не знаю, почему это давало проблемы раньше ... но теперь оно работает ...

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