1

我正在尝试在 Chrome 中预览文件,但它一直在下载。

    [HttpGet]
    [ResponseType(typeof(ByteArrayContent))]
    public HttpResponseMessage Download([FromUri] int uploadId)
    {
        try
        {
            Upload upload = UploadController.LoadByPrimaryKey(uploadId);

            var path = upload.FullPath + "\\" + upload.UploadGuid + upload.Extension;
            var mimeType = MimeTypeMap.GetMimeType(upload.Extension);

            MemoryStream pdf = new MemoryStream(File.ReadAllBytes(path));
            HttpResponseMessage result = null;
            result = Request.CreateResponse(HttpStatusCode.OK);
            result.Content = new ByteArrayContent(pdf.ToArray());
            result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline");
            result.Content.Headers.ContentDisposition.FileName = upload.OriginalFileName;
            result.Content.Headers.ContentType = new MediaTypeHeaderValue(mimeType);

            return result;
        }
        catch (Exception ex)
        {
          //..
        }
    }

这是 Fiddler 的踪迹。

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 793708
Content-Type: application/pdf
Expires: -1
Server: Microsoft-IIS/10.0
Access-Control-Allow-Origin: http://localhost:6701
Access-Control-Allow-Credentials: true
Content-Disposition: inline; filename="1451048-Customer Acceptance.pdf"
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sun, 19 Jun 2016 10:52:35 GMT
...

我已经看到在浏览器中打开 PDF 文件而不是下载 pdf 文件以及如何强制文件在浏览器中打开而不是下载 (pdf)?但我仍然有麻烦。

任何帮助将非常感激。

4

1 回答 1

1

我没有看到您的代码有任何问题,您的浏览器设置似乎更成问题(尽管大多数浏览器都有默认设置来呈现 PDF)。

如果在 Mozilla 中尝试

  1. 单击菜单按钮并选择选项。
  2. 选择应用程序面板。
  3. 在列表中找到可移植文档格式 (PDF) 并单击以将其选中。
  4. 单击上述条目的“操作”列中的下拉箭头,然后选择“在 Firefox 中预览”。

参考 - https://support.mozilla.org/en-US/kb/disable-built-pdf-viewer-and-use-another-viewer

对于铬

  1. 转到“选项”(单击右上角的扳手按钮)
  2. 转到:引擎盖下 -> 内容设置 -> 插件
  3. 单击“管理单个插件...
  4. 找到 Adob​​e Acrobat 插件(或任何其他 PDF 查看器)并确保它已启用

我的 API 中有完全相同的代码,它允许我根据 ContentDispositionHeaderValue 渲染 PDF 或下载(内联渲染和附件下载)

请参阅下面来自我的服务器的响应标头

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 46270
Content-Type: application/pdf
Server: Microsoft-IIS/10.0
Content-Disposition: inline; filename=Sample.pdf
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 20 Jun 2016 03:38:39 GMT

希望这可以帮助

于 2016-06-20T03:48:58.513 回答