【问题标题】:How upload and save image using Sails and MongoDB如何使用 Sails 和 MongoDB 上传和保存图像
【发布时间】:2018-01-15 07:19:57
【问题描述】:

我正在做一个项目,我正在使用后端 Sails js、MongoDB 作为数据库和前端 React js。
我在上传图片时遇到问题。
这是 Sails 后端的代码,当我在 PostMan 中对其进行测试时,我得到了这个结果(result test PostMan),并且图像没有存储在指定的文件夹中,而是在 MongoDB 中插入了一个包含 id 和文件名的值,

uploadFile: function (req, res) {
   var image= req.file('avatar');
         image.upload({
          adapter: require('skipper-gridfs'),
          uri: 'mongodb://localhost:27017/name_db.name_collection',
          dirname: '../../assets/images/'
        }, function (err, filesUploaded) {
          if (err){ 
            
            return res.header("Access-Control-Allow-Origin", "*");
            /*res.negotiate(err);*/res.json(err);
          }
          else{
           
            
           return
           res.header("Access-Control-Allow-Origin", "*"); res.ok({
              files: filesUploaded,
              textParams: req.params.all()
            });
          }
          
        });
      },

result test postMan

这里是 Reactjs 前端代码

_handleSubmit(e) {
  e.preventDefault();
  // TODO: do something with -> this.state.file
  fetch('http://localhost:1337/uploadPhoto/logos', {
    method: 'POST',
    body: JSON.stringify({avatar:this.state.file})
  })
  .then((response) => response.json())     
  .catch((err) => { console.log(err); });
}

Sails 0.12 版, 反应版本 15.5, 和 MongoDB 版本 3.4.9。

感谢您的帮助

【问题讨论】:

  • 您是否在 react.js 代码中提供了所有必需的标头?如我所见,在邮递员中有一个标题。也许一些授权
  • 我已经添加了一个标题但是它没有工作,(postMan中的标题:Content-Type:application / x-www-form-urlencoded)该值没有发送并且有没有返回错误

标签: mongodb reactjs sails.js


【解决方案1】:

skipper-gridfs 适配器没有dirname 参数,因为该文件不会存储到本地文件系统中。 Skipper 会将文件存储到 MongoDB 数据库中。

【讨论】:

  • 感谢您的解释,所以,我删除了 dirname 参数,当我用邮递员测试它时它可以工作,但是在 react.js 代码中,我不知道哪里错了
【解决方案2】:

你需要将它作为表单数据发送

   let formData = new FormData()
            console.log(values);
            
            await formData.append('profile_picture',values.profile_picture.rawFile,values.profile_picture)
            
            
            await fetch('http://localhost:1337/api/moderators',{
                body:formData,
                method:'POST',
                credentials:'include' //If Using Session for react-app instead of JWT token
            })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 2013-03-24
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2017-10-22
    • 2022-01-24
    相关资源
    最近更新 更多