2

我正在使用multer将文件上传到服务器。multer除了文档中实际提到的一个问题外,一切正常。这是一段摘录:

“请注意,req.body可能尚未完全填充”(这意味着当我猜想调用存储对象文件名函数时......)。“这取决于客户端将字段和文件传输到服务器的顺序”

这正是我的问题所在。我确实验证了req.body.ID它是否到达服务器,但它是在multer定义文件名之后填充的。

有没有人有任何建议如何处理这个问题?这是我的代码片段(文件名最终为“未定义”,带有正确的 jpg 扩展名):

//Storage object
var storage = multer.diskStorage({
  destination: './uploaded',
  filename: function(req, res, cb) {
    cb(null, req.body.ID + '.jpg')
  }
});

//File Upload Handle
router.post('/file-upload', upload.single('image'), function(req, res, next) {
  console.log("routes module-/file-upload " + req.body.ID); // The file ID gets transmitted
  res.sendStatus(201);
});

这是我的 HTML:

<form id="fileForm" enctype="multipart/form-data" >

    <div class="form-group">
        <input id='name' name="name" placeholder="ID" class="form-control-label">
    </div>

    <div class="form-group" align="center">
        <input type="file" id="file" name="image"> 
    </div>

<button type="submit" class="btn btn-warning"  value="Upload">Upload</button>

</form> 

和前端 AJAX:

//Testing Files Uploads
$("#fileForm").on('submit', function(event) {
  event.preventDefault();
  var formData = new FormData(this);
  var fileID = $('#name').val();
  formData.append("ID", fileID);

  $.ajax('/file-upload', {
      type: 'POST',
      data: formData,
      processData: false,
      contentType: false,
    })
    .done(function(item) {
      console.log('Uploaded!');
    })
    .error(function() {
      console.log('doesnt work!')
    });
});

//End of Files Uploads
4

2 回答 2

0

我相信req.body.ID是不正确的。您很有可能尝试使用req.body.name? 当我使用你的例子时,我也得到了 Undefined.jpg。但是使用.name,我得到了正确的文件名

于 2015-12-04T15:56:42.627 回答
0

聚会可能有点晚了,但我遇到了和你一样的问题。我通过将文件保存到临时位置来缓解问题,并在回调函数中,将所述函数移动(重命名)到所需位置。

于 2016-05-26T05:56:00.297 回答