amazon s3 не удается открыть PDF-файл в IE

#internet-explorer #pdf #amazon-s3 #knox-amazon-s3-client

#internet-explorer #PDF #amazon-s3 #knox-amazon-s3-client

Вопрос:

Я загрузил PDF-файл в s3 и использую подписанный URL. передаю amazonHeaders для размещения содержимого (я возвращаю заголовок ответа для размещения содержимого). Для этого я вставил исправление в client.js в KNOX

 var signature = auth.signQuery({
        amazonHeaders: options amp;amp; options.headers,
        secret: this.secret,
        date: epoch,
        resource: resource,
        verb: (options amp;amp; options.verb) || 'GET',
        contentType: options amp;amp; options.contentType,
        token: this.token,
    });
  

и передача параметров.заголовки

 headers = "response-content-disposition:attachment; filename=#{file._id}"
  

Но я не могу открыть это в IE, я могу открыть это в Chrome.

Я не знаю, действительно ли мне нужен заголовок content-disposition вообще. потому что, когда я пытаюсь это сделать с локального хоста / expess nodejs server.it отправьте тот же ответ. И он автоматически открывается в IE.

localhost

это ответ от Amazon / S3

введите описание изображения здесь

Комментарии:

1. Проблема только с PDF. Я попытался загрузить PNG, он работает нормально..

2. Что вы имеете в виду, вы «не можете открыть это в IE?» Что происходит при попытке? Ничего? Ошибка? Окно браузера полно шума?

3. никаких ошибок. просто .. серое окно..

4. какую версию Windows и IE вы используете? Какая у вас программа для чтения PDF (и ее версия)?

5. вы пытаетесь встроить PDF-файл в iframe или тег object?

Ответ №1:

Заголовки ответов на вашем скриншоте не отображают заголовок Content-Disposition, поэтому эта часть не работает, но я не знаю, является ли это вашей проблемой с IE.

Если вы хотите иметь Content-Disposition: attachment

Вам не нужно изменять knox (больше), чтобы добавить пользовательские заголовки ответов. Вы можете сделать:

 var headers = { 'response-content-disposition': 'attachment;filename=test.pdf'};
var expires = new Date(); expires.setYear(2020);
var url = client.signedUrl('/test.pdf', expires, { qs: headers });
  

Это дало мне URL, подобный https://mikie-knox-test.s3-eu-west-1.amazonaws.com/test.pdf?Expires=1594497470amp;AWSAccessKeyId=AKIAIW2ON37WUIIUJ2NAamp;Signature=fUQyOmYuPM2dEMPTY/RkssK0oxw=amp;response-content-disposition=attachment;filename=test.pdf .

(Я не думаю, что вы хотите, #{file._id} чтобы в вашем коде это выглядело как ошибка копирования-вставки из источника ruby).