SailsJS API文件上传

时间:2016-03-13 06:51:41

标签: sails.js postman

我正在使用我发现here的教程来帮助我找出SailsJS中的文件上传。在Sails中使用.ejs模板引擎时,我能够使上传工作正常,但我需要上传文件才能使用RESTapi。我设置的网址是“http://localhost:1337/file/upload”,我使用Postman Chrome应用程序将文件发送到服务器,但我得到的回复是:

{
  "status": 200,
  "file": []
}

当不使用API​​(在.ejs模板中执行)时,我得到以下响应:

{
  "status": 200,
  "file": [
    {
      "fd": "path/to/uploaded/file/.tmp/uploads/assets/images/18c60ef7-b176-4375-8789-e0f80de29cea.pdf",
      "size": 48541,
      "type": "application/pdf",
      "filename": "file.pdf",
      "status": "bufferingOrWriting",
      "field": "uploadFile"
    }
  ]
}

我不确定问题出在哪里,我是不是将文件传递给服务器?或者服务器一旦收到文件就没有正确处理文件?

供参考,这是我的控制器代码:

module.exports = {
    upload: function  (req, res) {
        if(req.method === 'GET')
            return res.json({'status':'GET not allowed'});                      

        var uploadFile = req.file('uploadFile');
        uploadFile.upload({ dirname: 'assets/images'},function onUploadComplete (err, files) {              
            if (err) return res.serverError(err);                               
            res.json({status:200,file:files});
        });
    },
};

2 个答案:

答案 0 :(得分:0)

我也这样做。因为我的情况并且有效;

  upload: function  (req, res) {
    if(req.method === 'GET')
      return res.negotiate(new Error('GET not allowed'));
    var fileName;
    try{
      fileName=req.file('uploadFile')._files[0].stream.headers['content-disposition'].split('"').reverse()[1];
    }
    catch(e){
      fileName="abc.abc";
    }
    req.file('uploadFile').upload({
      dirname:'../../tmp',
      saveAs:fileName
    },function onUploadComplete(err,files){
      if(err){
        console.log(err);
        return res.serverError(err);
      }
      if(!files.length) {
        return res.serverError(new Error('No file Uploaded'))
      }
      res.ok(files);
    });
  }

你可以看到这个.... So You can see that works for me

答案 1 :(得分:0)

为了关闭它,所以它可能会帮助其他人,Postman导致了这个问题 - 一旦我升级到最新版本,一切都按预期工作。