formdata+busboy上传文件没有响应?

新手上路,请多包涵

如题,lz 在学习用 FormData 上传文件。

前端 js 文件:

var fd= new FormData($('#musicup')[0]);//#musicup 是一个 form 表单
$.ajax({
    url: '/upload' ,
    method: 'POST',
    data: fd,
    async: false,
    cache: false,
    contentType: false,
    processData: false,
    success: function (returndata) {
        alert(returndata);
   },
    error: function (returndata) {
        alert(returndata);
   }
});

浏览器用的 firefox, 提交的时候最初没有任何消息头产生,但过了很长一段时间(大概是某个地方本身设了超时时间的原因)又会有请求头产生(没有响应头)。content-type 是 multipart/form-data;boundary...这些。
然后又改用 chrome,立即产生的头,content-type 还是 multipart/form-data...,formdata 的内容在 request payload 里面看得到,都是正确的。

后端用的 keystone,其实是封装的 express+mongodb 的框架

接收文件用了一个 connect 中间件 connect-busboy,

后端 js:

req.pipe(req.busboy);
req.busboy.on('file',function(fieldname,file,filename){
    console.log("Uploading: " + filename);
   //一些处理
});
req.busboy.on('data',function(data){
    console.log(data);
})
req.busboy.on('field',function(fieldname, val, fieldnametruncated, valtruncated){
    console.log(fieldname+", "+ inspect(val));
})
req.busboy.on('finish',function(){
    console.log("finished uploading");
})

结果只有 finish 事件触发了,file,data,field 都没有触发

哪位大神带带路。。。T T 纠结了好久了。。

*之前用$.ajax()上传的data字段是普通对象都是正常的,所以我怀疑是formdata+ajax的问题,但是用chrome看头的时候又又payload。。。

OTZ

阅读 3.3k
1 个回答
新手上路,请多包涵

我也遇到了这个问题 困扰了很久了 不知道你是否已经解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题