HttpResponseMessage 返回 ByteArrayContent 结果 - 在 chrome 中预览文档

HttpResponseMessage returning ByteArrayContent result - Preview document in chrome

我正在尝试预览 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
...

我已经看到了Open PDF file in browser rather than downloading pdf file and How to force files to open in browser instead of download (pdf)?,但我仍然遇到问题。

如有任何帮助,我们将不胜感激。

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

如果在 Mozilla 中尝试

  1. 单击菜单按钮并选择选项。
  2. Select 应用程序面板。
  3. 在列表中找到 Portable Document Format (PDF) 并点击它select。
  4. 单击上述条目的“操作”列中的 drop-down 箭头和 select 'preview in firefox'。

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

对于Chrome

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

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

查看来自我的服务器

的以下响应headers
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

希望对您有所帮助