【问题标题】:Change Content-Disposition to open all image file files in a new tab更改 Content-Disposition 以在新选项卡中打开所有图像文件文件
【发布时间】:2015-06-20 05:25:20
【问题描述】:

这是下载文件的逻辑。

它会自动下载文件,无论是 .jpg、.pdf、.zip 还是其他文件,如果它是图像文件(jpg、png 等),我希望它只在新选项卡中打开,然后是所有文件else 提示下载。

在解决这个问题时,我觉得我错过了一些东西。 :/

public void DownloadArchivedFiles(ArchiveType type, Object id, String fileName)
    {
        Response.ContentType = "application/zip";
        Response.AddHeader("content-disposition", "filename=" + fileName);

        String path = Server.MapPath(String.Format("~/{0}Files/{1}", type, id));
        var fmFiles = new string[0];
        var files=new string[0];
        if(type==ArchiveType.Issue)
        { 
            fmFiles = _files.GetIssueFiles(new Guid(id.ToString())).Select(x => Server.MapPath("~" + x.FilePath)).ToArray();
        }else if(type==ArchiveType.Task)
        {
            fmFiles = _files.GetTaskFiles(int.Parse(id.ToString())).Select(x => Server.MapPath("~" + x.FilePath)).ToArray();
        }
        if (!System.IO.Directory.Exists(path) && !fmFiles.Any()) return;

        //String[] files = System.IO.Directory.GetFiles(Server.MapPath(String.Format("~/{0}Files/{1}", type, id)));
        try
        {
            files = System.IO.Directory.GetFiles(Server.MapPath(String.Format("~/{0}Files/{1}", type, id)));
        }
        catch (Exception)
        {
            ;
        }

        using (ZipFile zip = new ZipFile())
        {
            zip.AddFiles(files, "/");
            if(fmFiles.Any())
            zip.AddFiles(fmFiles,"/");
            zip.Save(Response.OutputStream);
        }
        HttpContext.Response.End();
    }

【问题讨论】:

    标签: c# asp.net stream


    【解决方案1】:

    您无法通过在响应中提供标题来打开新标签。太晚了。在生成响应时,浏览器已经在尝试将响应流放到同一个选项卡中,并且旧文档可能已经被卸载。

    相反,您需要更改请求 的发送方式。具体来说,图像的链接必须具有_target="blank" 作为属性。这告诉浏览器打开一个新选项卡(或窗口,取决于用户的浏览器设置),然后在那里请求图像。此时您不需要对响应标头做任何特殊处理。

    对于可下载的文件(例如 PDF),您应该避免使用 target="blank"。它在某些浏览器上可以正常工作,但在其他浏览器上,您最终会看到难看的僵尸标签。

    【讨论】:

    • 我明白了,这就是我试图避免的,我想要一种浏览器通用的方式来做到这一点。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2017-02-01
    • 1970-01-01
    • 2017-09-28
    • 2016-12-07
    相关资源
    最近更新 更多