根据文件的类型下载文件,或者如何给Response.AppendHeader两个选项

本文关键字:文件 AppendHeader Response 选项 两个 类型 下载 或者 | 更新日期: 2023-09-27 18:10:18

我允许用户下载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();
        }
    }

根据文件的类型下载文件,或者如何给Response.AppendHeader两个选项

您可以使用像这样的实用程序来检测所讨论的文件的内容类型,然后像这样呈现标题:

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();
    }
}

您需要将您的内容类型设置为适当的应用程序,而不是octet-stream。

例如我用这个打开PowerPoint:

应用/vnd.openxmlformats-officedocument.presentationml.presentation

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

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