我的Angularjs应用程序向Node.js-server发送一个XML字符串作为POST数据。
var xmlString = (new XMLSerializer()).serializeToString(xmlData);
var fd = new FormData();
fd.append('xml', xmlString);
$http.post("/saveXML", fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).success(function (response) {
console.log('xml uploaded!!', response);
}).error(function (error) {
console.log("Error while uploading the xml!");
});
和Node.js接收数据并将其写入文件。
app.post('/saveXML', function (request, response) {
var xmlData = request.body.xml;
console.log(request.body);
fs.writeFile("./uploads/mergedXml.xml", xmlData, function(wError){
if (wError) {
console.log(wError.message);
response.send({
success: false,
message: "Error! File not saved!"
});
throw wError;
}
console.log("success");
response.send({
success: true,
message: "File successfully saved!"
});
});
});
问题是如果发送的XML字符串(POST xml数据)大于1MB,则Node.js(?)将其截断为 1MB 。这样" mergedXml.xml"然后 1MB或精确1024 Kb 。
我用于Node.js:"表达"," fs"," multer"," body-parser"。
我已尝试过各种设置,例如:
app.use(multer({
dest: './uploads/',
limits: {
fileSize: 999999999
}
}));
app.use(bodyParser.raw({limit: '10mb'}));
但他们没有奏效。这可能有什么问题?这可能是angularjs POST方法的问题吗? 我会感谢任何帮助。
答案 0 :(得分:5)
您可以使用require('body-parser-xml')
模块并进行一些配置。
请对以下代码段进行罚款:
var express = require('express');
var bodyParser = require('body-parser');
require('body-parser-xml')(bodyParser);
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.xml({
limit: '10MB', // Reject payload bigger than 10 MB
xmlParseOptions: {
normalize: true, // Trim whitespace inside text nodes
normalizeTags: false, // Transform tags to lowercase
explicitArray: false // Only put nodes in array if >1
}
}));
app.post('/saveXML', function (request, response) {
var xmlData = request.body.xml;
response.send(request.body);
});
var server = app.listen(3000);
我已经验证了1.9 mb的有效负载可以正常工作,您可以在最后检查。