- Используемые пакеты
const fastify = require('fastify');
const multer = require('fastify-multer');
const server = fastify();
server.register(multer.contentParser);
var AWS = require("aws-sdk");
var s3 = new AWS.S3();
var storage = multer.memoryStorage();
var upload = multer({ storage: storage });
вдохновлено Роханом Полом
2. Функция Для загрузки файла в корзину AWS S3
uploadInvoice = async (req, res) => {
var files = upload.single("file");
try {
const s3FileURL = ' https://up.s3.amazonaws.com/';
let s3bucket = new AWS.S3({
secretAccessKey: "",
accessKeyId: "",
region: ""
});
const params = {
Bucket: '',
Body: files.buffer,
ContentType: files.mimetype,
ACL: "public-read",
key: files.originalname
};
s3bucket.upload(params, function (err, files) {
if (err) {
res.status(500).json({ error: true, Message: err });
} else {
res.send({ files });
var newFileUploaded = {
description: req.body.description,
fileLink: s3FileURL + files.originalname,
s3_key: params.Key
};
var document = new DOCUMENT(newFileUploaded);
document.save(function (error, newFile) {
if (error) {
throw error;
}
});
}
});
};
ОШИБКА, которую я получаю: HttpErrorResponse {headers: HttpHeaders, status: 500, statusText: Internal Server Error, url: https: // localhost: 3000 / v1 / upload / files, ok: false,…} error: {statusCode: 500 , ошибка: внутренняя ошибка сервера, сообщение: params.Body is required} заголовки: HttpHeaders {normalizedNames: Map (0), lazyUpdate: null, lazyInit: ƒ} сообщение: ответ об ошибке HTTP для https: // localhost: 3000 / v1 / upload / files: 500 Имя внутренней ошибки сервера: HttpErrorResponse ok: false status: 500 statusText: Internal Server Error url: https: // localhost: 3000 / v1 / upload / files proto: HttpResponseBase
обновление: Multer на самом деле не работал, в этом случае я использовал fs и pump для загрузки файлов, и это сработало. — person baba-voss schedule 01.10.2020
В ваших параметрах ключ находится в нижнем регистре, тогда как при загрузке вы используете params.Key, который должен быть params.key
Используйте fs и pump, а НЕ multer, если вы используете fastify, потому что на данный момент fastify-multer точно не работает с загрузкой AWS S3.