angular multipart/form-data, sails.js 接收文件出现取不到值
angular 上传文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $http({ method: 'POST', url: 'url', headers: { 'Content-Type': undefined }, transformRequest: function(data) { var formData = new FormData(); angular.forEach(function(value, key){ formData.append(key, value); }); return formData; }, data: { file: 'xxxx', otherData: 'xxxxx' } });
|
sails 接收文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| var fs = require('fs'); var Promise = require('bluebird');
new Promise(function(resolve, reject) { req.file('file').upload(function(err, newFiles) { if(err || !newFiles || !newFiles[0]) { return reject(err); } resolve(newFiles[0]); }); }) .then(function(file) { filePath = file.fd; var stream = fs.createReadStream(filePath); return stream; }) .then(function(stream){ }) .catch(function(e){ }) .finally(function() { fs.unlink(filePath, function(err) { if(err) { sails.log.warn(err); } }); });
|
如果仅有文件上传, 或者上传的文件较小,不会发生问题,
但是既上传文件又上传其他字段
会导致 sails 无法取得 requestNo 的数据
故 使用 sails
接收 multipart/form-data
时, 前端上传时文件必须放最后面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var fd = new FormData(); fd.append('requestNo', data.requestNo);
fd.append('file', data.file);
return $http({ method: 'POST', url: 'url', headers: { 'Content-Type': undefined }, data: fd, transformRequest: angular.identity }) .then(function(data) { return data && data.data || {}; });
|
参考文档:
文章若有纰漏请大家补充指正,谢谢~~
http://blog.xinshangshangxin.com SHANG殇