HttpResponseMessage, возвращающий результат ByteArrayContent - Предварительный просмотр документа в 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)
        {
          //..
        }
    }

Это след от Фиддлера.

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 в браузере вместо загрузки файла PDF и Как заставить файлы открываться в браузере вместо загрузки (pdf)? но у меня все еще проблемы.

Любая помощь приветствуется.

1 ответ

Решение

Я не вижу каких-либо проблем с вашим кодом, похоже, больше проблем с настройками вашего браузера (хотя большинство браузеров имеют настройки по умолчанию для рендеринга PDF, видели иначе).

Если пытаться в Мозилле

  1. Нажмите кнопку меню и выберите "Параметры".
  2. Выберите панель "Приложения".
  3. Найдите Portable Document Format (PDF) в списке и щелкните по нему, чтобы выбрать его.
  4. Нажмите на стрелку раскрывающегося списка в столбце "Действие" для указанной выше записи и выберите "Предварительный просмотр в Firefox".

Ссылка - https://support.mozilla.org/en-US/kb/disable-built-pdf-viewer-and-use-another-viewer

Для Chrome

  1. Перейдите в "Параметры" (нажмите кнопку гаечного ключа в правом верхнем углу)
  2. Зайдите в: Под капотом -> Настройки контента -> Плагины
  3. Нажмите "Управление отдельными подключаемыми модулями..."
  4. Найдите плагин Adobe Acrobat (или любой другой просмотрщик PDF) и убедитесь, что он включен

У меня точно такой же код в моем API, и это позволяет мне отображать PDF или загружать на основе ContentDispositionHeaderValue (встроенный для отображения и вложения для загрузки)

Смотрите ниже заголовки ответа от моего сервера

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

Надеюсь это поможет

Другие вопросы по тегам