Я использую шифрование SSE-C для файлов S3, поэтому при воспроизведении видео я пересылаю запрос на S3 через сервер, правильно добавляя параметры.
export default async function(req, res) {
const {userid, fileid} = req.params;
console.log(userid, fileid);
const params = {
Bucket: process.env.AWS_BUCKET,
Key: `users/${userid}/notes/${fileid}`,
SSECustomerKey: process.env.AWS_SSE_KEY,
SSECustomerAlgorithm: "AES256"
};
s3.getObject(params)
.on("httpHeaders", function(statusCode, headers) {
console.log(headers);
res.set("Content-Length", headers["content-length"]);
res.set("Content-Type", headers["content-type"]);
res.set("Accept-Ranges", "bytes");
this.response.httpResponse.createUnbufferedStream().pipe(res);
})
.send();
}
Хотя это нормально работает с видео-тегом HTML5 в Chrome / Firefox, в Safari это не работает, поскольку возвращаемое значение Content-Type
равно application/octet-stream
(найден похожий вопрос Почему Safari не воспроизводит файл без расширения в )
Я попытался сбросить Content-Type
вручную на правильный video/quicktime
или video/mp4
в зависимости от файла, но это не помогает.
Я также пытался установить Content-Ranges
вручную, но эта информация не возвращается с S3 (или я что-то упускаю), так что это тоже не помогло.
Это вообще возможно достичь? Чего мне не хватает?