Я использую чистый js код и, и у меня есть файл с несколькими входами, который я хочу загрузить его значение в Amazon S3, код загрузки в S3 работает правильно, но когда я загружаю на одном из входные файлы, и он не закончен и не загружен в другой входной файл, код будет перезаписан для второй загрузки, поэтому я попытался использовать код здесь https://medium.com/@iamsohail / how-to-upload-множественные файлы- параллельно-к-amazon-s3-3b9ac3630806
Чтобы загрузить несколько файлов параллельно amazon S3 без конфликтов, но я столкнулся со многими проблемами,
var AWS = require('aws-sdk'),
multer = require('multer');
var upload = multer({ dest: 'uploads/' });
var fileChooser = document.getElementsByClassName('s3-input');
if (fileChooser) {
for (var i = 0; i < fileChooser.length; i++) {
fileChooser[i].addEventListener('change', function () {
var filechooserr = this;
var inputFile = $(this);
console.log(inputFile)
var s3url = $(this).parent().next();
var file = this.files[0];
if (file) {
// this code to rename input file
var today = new Date();
var date = today.getDate() + '-' + (today.getMonth()+1) + '-' + today.getFullYear();
var time = today.getHours() + "-" + today.getMinutes() + "-" + today.getSeconds();
var userId = filechooserr.getAttribute("data-user-id");
var uniqid = filechooserr.getAttribute("data-uniqid");
console.log("file name: " + file.name + " file type: " + file.type + "file extention: " + file.name.split('.').pop() );
if (this.classList.contains('personal-card-img')) {
var myNewFile = new File([file.name], 'Teachers/personal-card/'+ userId +"-"+ date +"-"+ uniqid + "." + file.name.split('.').pop() , {type: file.type});
} else if (this.classList.contains('profile-image-s3url')){
var myNewFile = new File([file.name], 'Teachers/Avatar/'+ userId +"-"+ date +"-"+ uniqid + "." + file.name.split('.').pop() , {type: file.type});
} else if (this.classList.contains('qualification-s3url')){
var myNewFile = new File([file.name], 'Teachers/Qualification/'+ userId +"-"+ date +"-"+ uniqid + "." + file.name.split('.').pop() , {type: file.type});
} else if (this.classList.contains('credit-card-img')){
var myNewFile = new File([file.name], 'Teachers/Credit-Card/'+ userId +"-"+ date +"-"+ uniqid + "." + file.name.split('.').pop() , {type: file.type});
} else {
var myNewFile = new File([file.name], 'Teachers/anythingElse/'+ userId +"-"+ date +"-"+ uniqid + "." + file.name.split('.').pop() , {type: file.type});
}
AWS.config.update({
accessKeyId: "MYPRIVETKEY",
secretAccessKey: "MYACSESSKRY",
region: "ap-south-1"
});
var s3 = new AWS.S3({
httpOptions: {
timeout: 1000 * 2000//1sec = 33minutes
}
});
async function uploadFile(fileName, fileKey) {
return new Promise(async function(resolve, reject) {
var params = {
Bucket: "bucket-name",
Key: myNewFile.name,
ContentType: myNewFile.type,
Body: file,
ACL: 'public-read'
};
await s3.upload(params, function(s3Err, data) {
if (s3Err){
reject(s3Err);
}
console.log(`File uploaded successfully at ${data.Location}`);
$(s3url).val(data.Location);
resolve(data.Location);
});
});
}
var uploadFilePromises = [];
var screenShot = request.files.screenShots;
var apk = request.files.apk;
var cpUpload = upload.fields([{
name: screenShot,
maxCount:5
},
{ name: apk,
maxCount:1
}
]);
router.post("/updateApp", cpUpload, async function (req, res, next) {
console.log("asmaa")
});
var apkFileKey = apk;
uploadFilePromises.push(uploadFile(apk[0], apkFileKey));
var screenShotFileKey = screenShot;
uploadFilePromises.push(uploadFile(screenShot[0], screenShotFileKey));
Promise.all(uploadFilePromises).then(async (values) => {
console.log(values);
}, reason => {
console.log(reason);
});
} else {
console.log("there is no file to upload")
}
}, false);
}
}
Первая проблема связана с плагином multer
: я не знаю, как его использовать. Я новичок в этом, когда я require('multer');
Я получил ошибку в консоли:
Uncaught TypeError: требуется не определено
I используйте gulp.js
, поэтому я решил эту проблему, добавив этот код
.pipe(rollup({ plugins: [json({compact: true}), babel(), resolve(), commonjs()] }, 'umd'))
, но я думаю, что это не решило проблему, потому что у меня возникла другая проблема:
Uncaught TypeError: Cannot read property 'memoizedProperty' of undefined
Итак, есть ли у кого-нибудь решение загрузить несколько файлов в Amazon Amazon?