使用react / express / multer上传forlder中的文件

时间:2018-03-01 11:52:37

标签: node.js express multer form-data

我尝试使用express和multer上传大文件。

回叫请求发送200但我不知道如何将我的文件上传到特定文件夹中。我尝试了两种方法但没有成功。

第一个:

app.post('/upload', (req, res, next) => {
  let myFile = req.files;
  let i = 0;

for (i; i < myFile.length; i++) {
    let filemName = MyFile[i].name
    myFile[i].mv(`${__dirname}/uploads/${fileName}`, function(err) {
      if (err) {
        return res.status(500).send(err);
      }
      res.json({file: `uploads/${fileName}`});
    });
  }
})

此代码返回500。

第二种方式(仅使用一个文件尝试):

app.post ('/uploader', (req, res, next) => {
  var file =  req.files.file;

  // file.mv(`${__dirname}/uploads/${file.name}`), function(err) {
  //   if (err) {
  //     return res.status(500).send(err);
  //   }
  // }
  console.log('file');
  console.log(file[0]);
  fs.rename(req.file[0], '~/dev/file-upload/backend/uploads' +  file[0].name, function (err) {
    if (err) throw err;
    console.log('Move complete');
  })

此代码不会返回任何错误,但不会将文件放入文件夹中。 最后我的客户端代码:

     handleUploadFile(event) {
    event.preventDefault();

    const data = new FormData();

    let c = this.uploadInput.files.length;
    console.log("c = ", c);

    console.log("mydata :", this.uploadInput.files);
    for (var i = 0; i < c; i++){
      data.append('filename', this.uploadInput.files[i].name);
      data.append('file', this.uploadInput.files[i]);
    }

  var options = {
    method: 'post',
    body: data,
  }

    fetch(apiBaseUrl + '/uploader', options).then((response) => {
      console.log('res', response);
    }).catch(function (err) {
      console.error("!!! error :",  err);
    })
  }

  render() {
    return (
      <form onSubmit={this.handleUploadFile}>
        <div>
          <input ref={(ref) => { this.uploadInput = ref; }} type="file"  multiple="multiple" />
        </div>

        <br />
        <div>
          <button>Upload</button>
        </div>    
      </form>
    );
  }

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。

body-parser不支持解析multipart / form-data请求的主体。

以下链接为我提供了所需的answers