简体   繁体   English

从服务器asp.net下载文件

[英]download file from server asp.net

I want to download a file from server to a local host. 我想将文件从服务器下载到本地主机。

i have a code from the net which should work but is not working 我有一个网上的代码,该代码应该可以工作但不能正常工作

     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";
        }
    }

now when the button is clicked the file should be downloaded from the server to the local host computer... but nothing seems to be happening... 现在,当单击按钮时,应该将文件从服务器下载到本地主机...但是似乎什么也没有发生...

i have the test.txt on the desktop of the serer... the save file option also does not come on the client side.. 我在serer的桌面上有test.txt ...保存文件选项也不在客户端上。

I publish the files and put it in the inetpub folder of the server and run the GUI from the client side.. everything works except this... 我发布文件并将其放在服务器的inetpub文件夹中,并从客户端运行GUI。

any suggestions...please help 任何建议...请帮助

this program downloads a file if it is present in the inetpub folder.. instead i want to download from any location within the server... 这个程序下载一个文件,如果它在inetpub文件夹中..我想从服务器内的任何位置下载...

?? ??

Write On Button Click On which u Want to Download Files “写在”按钮上,单击要下载文件的位置

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";
        }
    }

You mention that test.txt is on the server's desktop. 您提到test.txt在服务器的桌面上。 Is it also located right beside the page you're testing? 它也位于您要测试的页面旁边吗? Try either fully-qualifying the path the to the desktop ("C:\\Documents and Settings\\JohnDoe\\Desktop\\test.txt") or copying the file to sit alongside the .aspx page. 尝试完全限定到桌面的路径(“ C:\\ Documents and Settings \\ JohnDoe \\ Desktop \\ test.txt”),或将文件复制到.aspx页旁边。

您可以将文件夹更改到您的位置:

Directory.SetCurrentDirectory(HttpContext.Current.Server.MapPath("~ your path in here")

ok so i put a Response.Write after 好的,所以我把一个Response.Write之后

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

and found that file path was pointing to the inetpub folder... so when i put the test.txt in that folder it worked... so the program is right.. 并发现文件路径指向inetpub文件夹...因此,当我将test.txt放入该文件夹时,它起作用了...所以程序正确。

but now if the file is any other location in the server how should i modify the program... i am working on it but any suggestions are welcome 但是现在如果文件在服务器中的任何其他位置,我应该如何修改程序...我正在使用它,但是欢迎任何建议

Ok i got the answer for any path too 好吧,我也能找到任何答案

i remove the server.mappath and put the full location instead.. dont know why it was giving problems before.. but now it is working... 我删除了server.mappath并放置了完整位置。.之前不知道为什么会出现问题..但现在它可以工作了...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM