Вы пишете бэкэнд-код? Используете ли вы Node.js в качестве серверной части? Вы пишете API, которые принимают запрос multipart / form-data ?. Вы используете Amazon S3 для хранения файлов? У вас возникли проблемы с загрузкой файлов на amazon s3 ?. Тогда эта статья для вас. Да, вы попали в нужное место. В этой статье я расскажу, как загрузить файлы (будь то отдельные или несколько) на Amazon s3 за 10 простых шагов.
Шаг 1:
Установите пакет npm «aws-sdk».
Установите пакет npm «multer».
Это все, что вам нужно.
Шаг 2:
«Запрашивать» их из кода и сохранять в переменных.
const AWS = require ('aws-sdk');
const multer = require ('multer');
const upload = multer ({dest: 'uploads /'});
const fileSystem = требуется ('fs');
Шаг 3:
Создайте объект «s3» с помощью «идентификатора ключа доступа» и «секретного ключа доступа» веб-сервисов Amazon.
const s3 = новый AWS.S3 ({
accessKeyId: process.env.aws_access_key_id,
secretAccessKey: process.env.aws_secret_access_key
});
Хранение ключей в «process.env» выходит за рамки этой статьи. Об этом есть много статей в Интернете .
Шаг 4:
Создайте функцию uploadFile, как показано ниже.
async function uploadFile (fileName, fileKey) {
return new Promise (async function (resolve, reject) {
const params = {
Bucket: 'bucketName', // передать имя вашей корзины < br /> Ключ: fileKey,
ACL: 'public-read',
Body: fileSystem.createReadStream (fileName.path),
ContentType: fileName.type
};
await s3.upload (params, function (s3Err, data) {
if (s3Err) {
reject (s3Err);
}
console.log (`Файл успешно загружен на $ {data.Location} `);
resolve (data.Location);
});
});
}
Шаг 5:
Создайте массив обещаний.
var uploadFilePromises = [];
Шаг 6:
Создайте API для обслуживания запроса от клиента.
var cpUpload = upload.fields ([{name: ’screenShots’, maxCount: 1}, {name: ’apk’, maxCount: 1}]);
router.post (‘/ updateApp’, cpUpload, async function (req, res, next) {
}
Здесь переменная cpUpload содержит поля запроса, в которых есть файлы. maxCount сообщает вам максимальное количество файлов, которое серверная часть может принять для этого конкретного поля. Доступ к файлам можно получить следующим образом;
var screenShot = request.files.screenShots;
var apk = request.files.apk;
Шаг 7:
Измените API, включив следующее:
Создайте ключи для файлов соответственно и вызовите метод «uploadFile» с параметрами «файл» и «ключ файла». Вставьте вызов функции в переменную «uploadFilePromises», созданную на шаге 5.
Мы постараемся загружать файлы `apk` и` screenshot` параллельно. поскольку ‘request.files’ возвращает массив, мы должны получить первый файл, используя индекс 0.
var apkFileKey = «apk»;
uploadFilePromises.push (uploadFile (apk [0], apkFileKey));
var screenShotFileKey = «screenShot»;
uploadFilePromises.push (uploadFile (screenShot [0 ], screenShotFileKey));
Шаг 8:
Используйте метод Promise.all для параллельной загрузки файлов.
Promise.all (uploadFilePromises) .then (async (values) = ›{
console.log (values);
}, reason =› {
console.log (reason);
});
Шаг 9:
Наконец, API будет выглядеть, как показано ниже:
var cpUpload = upload.fields ([{name: ’screenShots’, maxCount: 5}, {name: ’apk’, maxCount: 1}]);
router.post (‘/ updateApp’, cpUpload, async function (req, res, next) {
var screenShot = req.files.screenShots;
var apk = req.files.apk;
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);
});
}
Шаг 10:
Вот и все !!!. Попробуйте сами. Дайте мне знать, если у вас возникнут какие-либо проблемы в разделе комментариев ниже. И, если вам понравилась эта статья, пожалуйста, дайте мне аплодисменты (нажмите значок хлопка ниже (столько раз, сколько хотите: P)).
Удачного кодирования !!!