Eli*_*mar 5 javascript ajax node.js axios
我正在使用“Axios”来调用将文件信息和内容作为参数的 WCF 方法。该文件作为 base64 编码字符串被读取和发送。我的问题是,当文件大小超过某个限制时,AXIOS 会抛出异常:“错误:请求正文大于 maxBodyLength 限制”。我查了一下问题,发现所有解决方案都建议增加 AXIOS 配置对象中的 maxContentLength / maxBodyLength 参数,但没有成功。在 node.js 中找到以下已实现的测试用例:
var axios = require('axios');
var fs = require('fs');
var path = require('path')
var util = require('util')
let readfile = util.promisify(fs.readFile)
async function sendData(url,data) {
let params = data
let resp = await axios({
method: 'post',
url: url,
data: JSON.stringify(params),
headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }
// maxContentLength: 100000000,
// maxBodyLength: 1000000000
}).catch(err => {
throw err;
})
return resp;
}
async function ReadFile(filepath) {
try{
let res = await readfile(filepath,'base64')
let filename = path.basename(filepath).split('.').slice(0, -1).join('.')
let ext = path.extname(filepath)
return {data:res,fext:ext,fname:filename}
let x = 1
}
catch(err)
{
throw err
}
}
(async () => {
try {
let img = await ReadFile('Files/1.pdf')
let res = await sendData('http://183.183.183.242/EMREngineEA/EMRWS.svc/web/EMR_TestUploadImg',img)
console.log(res)
}
catch (ex) {
console.log(ex)
}
}
)();
Run Code Online (Sandbox Code Playgroud)
在我的例子中,pdf 文件是 20 MB,运行时会抛出错误。“错误:请求正文大于 maxBodyLength 限制”
我试图设置 maxContentLength: 100000000, maxBodyLength: 1000000000 如上所述,但没有成功。
感谢您的帮助。
Ter*_*nox 11
在这个简单的测试中,maxBodyLength 似乎对我有用,我将数据上传到本地 Express 服务器。如果我尝试上传超过 maxBodyLength 的内容,我会收到与您相同的错误。所以我怀疑还有更多的东西,比如在你的情况下发生的重定向触发了错误。
此处为 axios 记录了一个问题似乎引用了该问题,它建议将 maxContentLength 设置为 Infinity(正如其他评论者所建议的那样)。
例如
maxContentLength: Infinity,
maxBodyLength: Infinity
Run Code Online (Sandbox Code Playgroud)
测试代码如下:
const axios = require("axios");
function generateRandomData(size) {
const a = Array.from({length: size}, (v, k) => Math.floor(Math.random()*100));
return { data: a, id: 1 };
}
async function uploadData(url, size) {
let params = generateRandomData(size);
let stringData = JSON.stringify(params);
console.log(`uploadData: Uploading ${stringData.length} byte(s)..`);
let resp = await axios({
method: 'post',
url: url,
data: stringData,
headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },
maxContentLength: 100000000,
maxBodyLength: 1000000000
}).catch(err => {
throw err;
})
console.log("uploadData: response:", resp.data);
return resp;
}
uploadData("http://localhost:8080/upload", 10000000);
Run Code Online (Sandbox Code Playgroud)
对应的服务器代码:
const express = require("express");
const port = 8080;
const app = express();
const bodyParser = require('body-parser')
app.use(bodyParser.json({limit: '50mb'}));
app.post('/upload', (req, res, next) => {
console.log("/upload: Received data: body length: ", req.headers['content-length']);
res.json( { status: 'ok', bytesReceived: req.headers['content-length']});
})
app.listen(port);
console.log(`Serving at http://localhost:${port}`);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20645 次 |
| 最近记录: |