Вы пишете бэкэнд-код? Используете ли вы 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)).

Удачного кодирования !!!