2013-02-15 90 views
1

我想使用在Chrome和Firefox浏览器上找到的jQuery Ajax + FormData对象上传文件。我用做它的代码如下:快速解析req.body中的多部分/表单数据发布

var formData = new FormData(); 
    formData.append('image', $scope.image.data); 

    $.ajax({ 
     url: '/wines/'+id+'/image', 
     type: 'POST', 
     data: formData, 
     processData:false, 
     contentType:false 
    }).done(function(){ 
     $location.path('/'); 
    }); 

通过查看开发人员工具,我可以看到该请求是正确形成,但是表达的是认识内部req.body而不是REQ内容。文件。这里是请求负载图像:

Request payload

快速配置:

app.configure(function(){ 
app.set('views', __dirname + '/app'); 
app.engine('.html', require('ejs').renderFile) 
app.use(express.static(__dirname + '/app')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 

app.use(app.router); 
}); 

什么是什么,我做错了? 非常感谢。

回答

1

因为它不是一个文件,它只是一个字符串。对于AJAX文件FormData你必须通过一个文件对象FormData.append你传递的是一个数据URI,它只是一个字符串。

multipart/form-data体的文件看起来像这样

------WebKitFormBoundaryNBylbsEYlWSsq2lB 
Content-Disposition: form-data; name="image"; filename="999.jpg" 
Content-Type: image/jpeg 

The file content here 
------WebKitFormBoundaryNBylbsEYlWSsq2lB--
+0

你说得对,我是送的FileReader结果,当我需要发送的原始文件对象 – Pablo 2013-02-15 04:20:39