我有这个代码创建project
并将图像上传到Amazon S3。
我正在使用Bodyparser
中间件来处理来自客户端的数据,但经过一些研究后我发现它没有处理formdata
。我需要使用multer
或类似的库。
这是我尝试使用multer:
在处理Post
Create
功能import multer from 'multer';
const upload = multer();
routes.post(
'/',
upload.any('projectImage'),
ProjectController.create,
);
请求的路径文件夹中,我添加了这样的内容:
Create
以下是export async function create(req, res, next) {
const body = req.body;
S3Upload(req, res, async (s3err, s3res) => {
if (s3err) {
res.send('Error occured uploading image')
} else if (s3res && s3res.Location) {
body.projectImage = s3res.Location
try {
return res
.status(HTTPStatus.CREATED)
.json(await Project.createProject(body, req.user._id));
} catch (err) {
err.status = HTTPStatus.BAD_REQUEST;
return next(err);
}
} else {
res.send('Error creating project.')
}
});
}
功能:
/project
现在,当我向(node:77236) UnhandledPromiseRejectionWarning: TypeError: (0 , _s2.default) is not a function
(node:77236) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
路线发送帖子请求时。我收到这个错误:
Create
PS。 export async function S3Upload(req, res, callback) {
const chunks = [];
let fileType;
let fileEncodingType;
const busboy = new Busboy({
headers: req.headers,
});
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
filename.replace(/ /g, "_");
fileType = mimetype;
fileEncodingType = encoding;
file.on('data', data => {
chunks.push(data)
});
file.on('end', () => {
console.log(`File [${filename}] Finished`);
});
});
busboy.on('finish', () => {
const userId = UUID();
const params = {
Bucket: BUCKET_NAME,
Key: userId,
Body: Buffer.concat(chunks),
ACL: ACL,
ContentEncoding: fileEncodingType,
ContentType: fileType
}
S3.upload(params, (err, s3res) => {
if (err) {
callback(err);
} else {
callback(null, s3res);
}
});
});
req.pipe(busboy);
}
函数可以在不添加S3Upload的情况下完美运行。 &安培;如果我只发送文件,S3Upload也可以正常工作。它不起作用的唯一时间是我发送混合数据。即包含一些文本字段和文件的表单。
我没有发布S3Upload功能,但如果有人好奇,请告诉我,我会分享它的代码。
更新
(?:[^\,]*\,){18}BT
(?:[^\,]*\,){18}CV7
(?:[^\,]*\,){18}CV30