Почему мой PDF-файл, загруженный с использованием заранее заданного URL-адреса AWS S3, не имеет правильного типа содержимого? - PullRequest
0 голосов
/ 21 февраля 2020

Я использую AWS S3 с предварительно назначенными URL-адресами как для загрузки (putObject), так и для загрузки (getObject).

Я заметил, что сгенерированные URL-адреса для загрузки PDF-файлов загружаются, а не отображаются в цель _blank. Я проследил это за тем, что мои объекты s3 имеют поле метаданных ContentType, установленное на application/x-www-form-urlencoded вместо application/pdf, как я и просил. Это работает, когда я вручную изменяю метаданные типа контента на S3.

Код, используемый для генерации предварительно назначенного putObject URL, таков:

console.log("presigning with ", fileInput);
/* Will print something like:
presigning with  [Object: null prototype] {
  name: 'myFile.pdf',
  mimetype: 'application/pdf',
  size: 321528
}
*/
const { name, size, mimetype } = fileInput
const signedUrlExpireSeconds = 60 * 60
let data = {}
const key = "articles/" + Date.now().toString() + ".pdf"
let params = {
       Bucket: 'mybucket',
       Key: key,
       Expires: signedUrlExpireSeconds,
       ContentType: mimetype
};
data.url = await uploadToS3(params)// what I will use to upload from the client browser


export const uploadToS3 = (params) => {
    AWS.config.update({
        accessKeyId: process.env.S3ACCESSKEYID,
        secretAccessKey: process.env.S3SECRETACCESSKEY,
        region: process.env.S3REGION
    });
    var s3 = new AWS.S3();
    return s3.getSignedUrlPromise('putObject', params);
}

Сгенерированный URL действительно содержит тип контента как показано ниже (усеченный URL):

https://mybucket.s3.eu-west-3.amazonaws.com/articles/1582299553999.pdf?Content-Type=application%2Fpdf&X-Amz-Algorithm......

Однако, когда я пытаюсь отобразить свой pdf на вкладке _blank, браузер загружает его из-за неверного типа контента application/x-www-form-urlencoded, установленного во время S3 Upload.

Я предполагаю, что предварительно назначенный URL-адрес getObject в порядке, так как он работает, когда я вручную обновляю на S3 тип содержимого файла.

Я что-то упускаю при загрузке?


ОБНОВЛЕНИЕ

Я подумал, может ли это быть связано с топором ios Запрос на размещение сделан на основе предварительно назначенного URL. На основании комментариев к этому вопросу мне удалось получить правильный тип контента.

Тем не менее, PDF не загружается, потому что значок недоступен ... Есть 2 сетевых вызова, один для PDF, который в порядке с 304, и один для значка, который получает 400 неправильных запросов на firefox и 403 запрещены для хрома. Как следствие (кажется), файл PDF считается недействительным.

Я сделал файл favico единственным опубликованным c, но PDF все еще считается недействительным. Однако при загрузке он отображается правильно.

...