更改“内容处置”以在新选项卡中打开所有图像文件文件



这是下载文件的逻辑。

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新