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, видели иначе).
Если пытаться в Мозилле
- Нажмите кнопку меню и выберите "Параметры".
- Выберите панель "Приложения".
- Найдите Portable Document Format (PDF) в списке и щелкните по нему, чтобы выбрать его.
- Нажмите на стрелку раскрывающегося списка в столбце "Действие" для указанной выше записи и выберите "Предварительный просмотр в Firefox".
Ссылка - https://support.mozilla.org/en-US/kb/disable-built-pdf-viewer-and-use-another-viewer
Для Chrome
- Перейдите в "Параметры" (нажмите кнопку гаечного ключа в правом верхнем углу)
- Зайдите в: Под капотом -> Настройки контента -> Плагины
- Нажмите "Управление отдельными подключаемыми модулями..."
- Найдите плагин 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
Надеюсь это поможет