代码下载文件

时间:2012-03-26 10:55:56

标签: c# asp.net

我必须在我的网站上提供一个选项来上传多个文件,然后允许用户下载这些文件。 我已经完成了上传多个文件的部分,但是我不太清楚我将如何下载部分。 我首先想到将动态超链接添加到每个文件的标签上(因为我不确定用户将上传多少文件)。 但它然后在浏览器中打开文件,并没有提供保存或打开文件的选项。 主要问题是用户可以提交任何类型的文件,如ms doc或xls或文本文件等。因此内容类型不固定。

我不清楚我将如何做到这一点我的意思是动态添加链接按钮或动态添加超链接。之后我将如何下载文件?我无法做到

Response.WriteFile(Server.MapPath(@"~/logo_large.gif"));

因为内容类型不明确。 关于下载所有类型文件的代码,请帮助我

5 个答案:

答案 0 :(得分:6)

下载文件:

    public void DownLoad(string FName)
    {
        string path = FName;
        System.IO.FileInfo file = new System.IO.FileInfo(path);
        if (file.Exists)
        {
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.WriteFile(file.FullName);
            Response.End();

        }
        else
        {
            Response.Write("This file does not exist.");
        }

    }

但这适用于word doc / docx文件。在行中:Response.ContentType = "application/octet-stream";您必须定义文件的类型。

用于显示超链接,动态编写一个循环并遍历用户上传的所有文件并编写以下代码:

     yourdivId += "<a href='" + file.FullName + "' >" + file.Name + "</a></br>";

答案 1 :(得分:1)

希望这会对你有帮助。()

 Response.Clear();
 Response.ContentType = YourFile.ToString();
 Response.AddHeader("Content-Disposition", "attachment;filename=" + YourFileName);
 Response.OutputStream.Write(YourFile, 0, YourFile.Length);
 Response.Flush();
 Response.End();

I have tried this to download img,txtfile,zip file,doc it works fine..
but little problem user will face that in my case when i opened a word(doc) file its ask 
me to openwith..? when i select MsWord it opened it correctly.

要显示这些文件,您可以制作网格视图以显示带有下载链接的所有文件...

答案 2 :(得分:1)

实际上你可以采用不同的方式。

  1. 在上传过程中引导用户并让他在开始上传之前指定文件类型。因此,用户必须从选择中选择内容类型。您需要保存文件及其内容类型之间的关联。

  2. 在文件扩展名和mime-types(See here for example)之间创建一个映射。您需要获取文件扩展名并保存该文件与其内容类型之间的关联。

  3. 尝试自动识别内容类型。有一个Windows API可以让您识别文件的Mime类型。并here is some code
  4. 之后,您可以使用st mnmn解决方案。

答案 3 :(得分:0)

你可以这样做:

try
        {
            string strURL=txtFileName.Text;
            WebClient req=new WebClient();
            HttpResponse response = HttpContext.Current.Response;
            response.Clear();
            response.ClearContent();
            response.ClearHeaders();
            response.Buffer= true;
            response.AddHeader("Content-Disposition","attachment;filename=\"" + Server.MapPath(strURL) + "\"");
            byte[] data=req.DownloadData(Server.MapPath(strURL));
            response.BinaryWrite(data);
            response.End();
        }
        catch(Exception ex)
        {
     }

答案 4 :(得分:0)

在服务器将文件发送到客户端之前,您必须设置几个响应标头。见How to Download a file with a hyperlink