Я использую 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 все еще считается недействительным. Однако при загрузке он отображается правильно.