【问题标题】:Download files based on their type, or how to give two options to Response.AppendHeader根据文件类型下载文件,或者如何为 Response.AppendHeader 提供两个选项
【发布时间】:2014-06-24 17:58:42
【问题描述】:

我允许用户下载 PDF 文件或 zip 文件,当他们尝试下载文件时,我希望根据文件的类型下载适当的文件。例如:如果上传的文件是PDF,那么应该下载为PDF;如果上传的文件是 zip,则应下载为 zip 文件。

我已经编写了这段代码,我可以使用附加标头中的“output.pdf”将文件下载为 PDF,但不知道如何提供两个选项来附加标头,以便它根据下载文件它的类型。

 protected void gridExpenditures_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Download")
        {
            Response.Clear();
            Response.ContentType = "application/octet-stream";
            Response.AppendHeader("content-disposition", "FileName=" + e.CommandArgument + "output.pdf");
            Response.TransmitFile(Server.MapPath("~/Match/Files/") + e.CommandArgument);
            Response.End();
        }
    }

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您可以使用this one 之类的实用程序来检测相关文件的内容类型,然后像这样呈现标题:

    protected void gridExpenditures_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Download")
        {
            var filePath = Server.MapPath("~/Match/Files/") + e.CommandArgument;
            var contentType = MimeTypes.GetContentType(filePath);
            if (string.IsNullOrEmpty(contentType))
            {
                contentType = "application/octet-stream";
            }
            Response.Clear();
            Response.ContentType = contentType;
            Response.AppendHeader("content-disposition", "FileName=" + e.CommandArgument);
            Response.TransmitFile(filePath);
            Response.End();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您需要将内容类型设置为适当的应用程序,而不是八位字节流。

      例如我有这个来打开 PowerPoint:

      application/vnd.openxmlformats-officedocument.presentationml.presentation

      在此链接中查找您的文件类型: http://en.wikipedia.org/wiki/Internet_media_type

      我将每个文件的上传内容类型存储在我的数据库中。

      【讨论】:

      • 那么我们如何同时为两种类型的应用程序设置我们的内容类型呢?有办法吗?
      • 一个文件实际上应该只与一种内容类型相关联。一个 zip 可能包含一个 PDF……但它仍然是一个 ZIP,将根据操作系统上的设置进行处理。当您需要两种类型时,用例会是什么?
      • 大多数情况下,用户只会向我发送一个 pdf 文件,但在某些情况下,他们会以 zip 文件的形式向我发送多个文件,其中包含各种文件,例如 jpeg、doc、 xml 等,这就是为什么我尝试根据文件类型提供下载文件的选项。
      • 如果您存储的是 ZIP 文件,那么他们将下载一个 ZIP 文件。他们将需要自己提取各个文件。应用程序、您或操作系统都知道 ZIP 文件中的内容。如果您尝试将 ZIP 文件与 PowerPoint 关联,当 PowerPoint 打开时,它会向用户抛出错误。
      • 不,我不是想这样做,我知道这是不可能的它以 zip 文件的形式下载。我正在使用 GUID 来命名文件,因此现在所有文件都在没有任何类型的情况下下载,因为它们的扩展名附加了一个 GUID。
      猜你喜欢
      • 2020-02-12
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2013-03-25
      • 2017-09-22
      • 2019-01-08
      相关资源
      最近更新 更多