Javascript Express js将多部分表单数据发布到外部API
我有一个angular应用程序和一个调用外部API的中间件express serverJavascript Express js将多部分表单数据发布到外部API,javascript,angularjs,express,post,requestjs,Javascript,Angularjs,Express,Post,Requestjs,我有一个angular应用程序和一个调用外部API的中间件express server $scope.uploadLayout = function(){ $scope.selectedTemplate.selected = $scope.items; var fd = new FormData() fd.append('name', $scope.template.name) fd.append('description', $scope.templat
$scope.uploadLayout = function(){
$scope.selectedTemplate.selected = $scope.items;
var fd = new FormData()
fd.append('name', $scope.template.name)
fd.append('description', $scope.template.desc)
fd.append('file', $scope.template.file)
$http.post('/layout/template',fd,{
transformRequest: angular.identity,
headers: { 'Content-Type': undefined}
}).then(function(response){
getLayoutRules()
console.log("file uploaded successfully")
})//add error callback
console.log('test')
}
主要问题发生在express将数据发送到外部API时
app.post('/layout/template', upload.any(), (req, res) => {
// console.log(req.body.name);
var formdata = new Buffer(req.files)
var form = new FormData();
form.append('name', req.body.name)
form.append('description', req.body.description)
form.append('file', formdata)
console.log(form)
var contentLength = req.files.length;
var url = `${apiUrl}/layout/template`
// var r = request.post(url,{
// headers: { 'Content-Type': undefined}
// }, function optionalCallback(err, httpResponse, body) {
// if (err) {
// return console.error('upload failed:', err);
// }
// console.log('Upload successful! Server responded with:', body);
// })
request({
headers: {
'Content-Length': contentLength,
'Content-Type': 'multipart/form-data'
},
url:url,
method:'POST',
body: form
},function(err,body,res){
console.log(err)
console.log(body)
})
});
我已经检查了表单是否正确生成,但是外部API服务器给了我一个错误,说明
“由于未找到多部分边界,请求被拒绝”
请帮忙,还是有别的办法
更新
我稍微修改了代码,以发送从浏览器获取的请求头
app.post('/layout/template', upload.any(), (req, res) => {
var header = req.headers['content-type']
var formdata = new Buffer(req.files)
console.log(formdata)
var fd = new FormData();
fd.append('name', req.body.name)
fd.append('description', req.body.description)
fd.append('file', formdata)
//var contentLength = req.files.length;
//console.log(contentLength)
var url = `${apiUrl}/layout/template`
//console.log(fd)
// var r = request.post(url,{
// headers: { 'Content-Type': undefined}
// }, function optionalCallback(err, httpResponse, body) {
// if (err) {
// return console.error('upload failed:', err);
// }
// console.log('Upload successful! Server responded with:', body);
// })
request({
headers: {
'Content-Type': header
},
url:url,
method:'POST',
body: fd
},function(err,body,res){
//console.log(body)
console.log(res)
})
//console.log(request)
});
因此,现在我发送由浏览器设置的相同边界,但java服务器未检测到表单参数相同的错误,不同的堆栈:使用
formData:fd
而不是body:fd
。看看,也试过了,运气不好