首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Axios中增加maxContentLength和maxBodyLength

在Axios中增加maxContentLength和maxBodyLength
EN

Stack Overflow用户
提问于 2019-11-01 15:18:50
回答 1查看 25K关注 0票数 5

我使用"Axios“来调用一个WCF方法,该方法接受文件信息和内容作为参数。读取该文件并将其作为base64编码的字符串发送。我的问题是,当文件大小超过某个限制时,AXIOS会抛出一个异常:"Error: Request body size than maxBodyLength limit“。我查找了这个问题,发现所有的解决方案都建议增加AXIOS配置对象中的maxContentLength / maxBodyLength参数,但都没有成功。在node.js中找到一个已实现的测试用例:

代码语言:javascript
运行
复制
    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)
        }
    }
    )();

在我的例子中,pdf文件是20MB,在运行时抛出一个错误。“错误:请求正文大于maxBodyLength限制”

我尝试如上所述设置maxContentLength: 100000000,maxBodyLength: 1000000000,但没有成功。

非常感谢您的帮助。

EN

Stack Overflow用户

回答已采纳

发布于 2019-11-01 16:41:12

在这个简单的测试中,maxBodyLength似乎很适合我,我将数据上传到本地Express服务器。如果我尝试上传比maxBodyLength更多的内容,我会得到和你一样的错误。所以我怀疑还有更多的东西,比如在你的案例中发生的重定向触发了错误。

axios here记录的问题似乎引用了这个问题,它建议将maxContentLength设置为无穷大(正如另一个评论者所建议的那样)。

例如:

代码语言:javascript
运行
复制
maxContentLength: Infinity,
maxBodyLength: Infinity

测试代码如下:

代码语言:javascript
运行
复制
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);

对应的服务器代码:

代码语言:javascript
运行
复制
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}`);
票数 13
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58655532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档