У меня есть настройки для загрузки файлов в AWS S3 через Angular 7 и Node.Js.Загрузка работает отлично.Но есть проблема с событием xhr.upload.onprogress
.
Это событие вызывается только при размещении сервера через http
.При использовании соединения https
событие не запускается ни разу.
Я протестировал его на heroku и своем экземпляре EC2 и пришел к выводу, что работает только http
.Поэтому мое производственное приложение, размещенное на AWS через https
, также не работает.
Вот код (напишите комментарий, если требуется более подробная информация):
Angular Service (Frontend)
const xhr = new XMLHttpRequest();
let progress = 0;
xhr.upload.onprogress = (event: ProgressEvent) => {
console.log('xhr on upload', event);
if (event.lengthComputable) {
progress = 100 * (event.loaded / event.total);
console.log('file upload progress', { progress, file });
}
};
xhr.responseType = 'json';
xhr.open('POST', `${API_URL}/${this.API_PATH}/upload`, true);
xhr.setRequestHeader('authorization', this.authService.getAuthToken());
xhr.send(payload);
xhr.onload = () => {
observer.next(xhr.response);
observer.complete();
alive = false;
};
Node.Js
module.exports = async (req, res) => {
try {
const busboy = new Busboy({ headers: req.headers })
busboy.on('finish', async () => {
const fileData = req.files.file
const fileId = req.body.fileId
await uploadToAws(fileData)
// ...
})
req.pipe(busboy)
} catch (err) { /* ... */ }
}
const uploadToAws = async (fileData, file) => {
return new Promise((resolve, reject) => {
const params = {
Body: fileData.data,
Bucket: awsConfig.buckets.drakery,
ContentType: fileData.mimetype,
Key: `mykey`,
StorageClass: 'ONEZONE_IA',
}
awsConfig.s3
.upload(params, (err, data) => err ? reject(err) : resolve(data.Location))
.on('httpUploadProgress', function (evt) {
console.log('httpUploadProgress', evt);
})
})
Я действительно смущен, почему это происходит.Я не смог найти никаких ресурсов в Интернете по этой проблеме.
Я очень благодарен за любую помощь!
Спасибо