s3文件上载“预期params.key为字符串”

zbwhf8kr  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(268)

我正试图用我的nodejs后端将一个图像上传到s3,但我无法让它工作。
这就是我得到的错误:

  1. InvalidParameterType: Expected params.Key to be a string
  2. 2021-07-25T15:07:10.575922+00:00 app[web.1]: at ParamValidator.fail (/app/node_modules/aws-sdk/lib/param_validator.js:50:37)
  3. 2021-07-25T15:07:10.575923+00:00 app[web.1]: at ParamValidator.validateType (/app/node_modules/aws-sdk/lib/param_validator.js:232:10)
  4. 2021-07-25T15:07:10.575923+00:00 app[web.1]: at ParamValidator.validateString (/app/node_modules/aws-sdk/lib/param_validator.js:154:32)
  5. 2021-07-25T15:07:10.575923+00:00 app[web.1]: at ParamValidator.validateScalar (/app/node_modules/aws-sdk/lib/param_validator.js:130:21)
  6. 2021-07-25T15:07:10.575924+00:00 app[web.1]: at ParamValidator.validateMember (/app/node_modules/aws-sdk/lib/param_validator.js:94:21)
  7. 2021-07-25T15:07:10.575924+00:00 app[web.1]: at ParamValidator.validateStructure (/app/node_modules/aws-sdk/lib/param_validator.js:75:14)
  8. 2021-07-25T15:07:10.575925+00:00 app[web.1]: at ParamValidator.validateMember (/app/node_modules/aws-sdk/lib/param_validator.js:88:21)
  9. 2021-07-25T15:07:10.575925+00:00 app[web.1]: at ParamValidator.validate (/app/node_modules/aws-sdk/lib/param_validator.js:34:10)
  10. 2021-07-25T15:07:10.575925+00:00 app[web.1]: at Request.VALIDATE_PARAMETERS (/app/node_modules/aws-sdk/lib/event_listeners.js:132:42)
  11. 2021-07-25T15:07:10.575926+00:00 app[web.1]: at Request.callListeners (/app/node_modules/aws-sdk/lib/sequential_executor.js:106:20) {
  12. 2021-07-25T15:07:10.575926+00:00 app[web.1]: code: 'InvalidParameterType',
  13. 2021-07-25T15:07:10.575927+00:00 app[web.1]: time: 2021-07-25T15:07:10.571Z
  14. 2021-07-25T15:07:10.575927+00:00 app[web.1]: }

这是我的uploadfile()函数:

  1. const bucketName = process.env.AWS_BUCKET_NAME;
  2. const region = process.env.AWS_BUCKET_REGION;
  3. const accessKeyId = process.env.AWS_ACCESS_KEY;
  4. const secretAccessKey = process.env.AWS_SECRET_KEY;
  5. const s3 = new S3({
  6. region,
  7. accessKeyId,
  8. secretAccessKey,
  9. });
  10. // uploads a file to s3
  11. function uploadFile(file) {
  12. const fileStream = fs.createReadStream(file.path);
  13. const uploadParams = {
  14. Bucket: bucketName,
  15. Key: file.filename,
  16. Body: fileStream,
  17. };
  18. return s3.upload(uploadParams).promise();
  19. }
  20. exports.uploadFile = uploadFile;

它使用multer中间件获取文件,该中间件工作正常,我可以使用console.log()查看该文件。这是控制器:

  1. const uploadAvatar = async (req, res) => {
  2. try {
  3. const id = req.user;
  4. const file = req.file;
  5. const result = await uploadFile(file);
  6. await unlinkFile(file.path);
  7. await knex('users').where('id', id).update({
  8. avatar_url: result.Key,
  9. });
  10. return res.status(200).send({ msg: 'Photo has been uploaded.' });
  11. } catch (err) {
  12. return res.status(500).send({ msg: err.message });
  13. }
  14. };
  15. //route
  16. router.post('/upload-avatar', auth, upload.single('image'), customerController.uploadAvatar);

我不明白我做错了什么,我试着把钥匙改成“测试”,但没有成功。我也找不到相关的问题。
任何帮助都将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题