Increasing maxContentLength and maxBodyLength in Axios

风流意气都作罢 提交于 2020-04-16 03:53:29

问题


I am using "Axios" to call a WCF method that takes as parameter file information and content. The file is read and sent as a base64 encoded string. My issue is that when the file size exceeds a certain limit, AXIOS throws an exception: "Error: Request body larger than maxBodyLength limit". I looked up the issue and found that all solutions suggest increasing the maxContentLength / maxBodyLength parameters in the AXIOS configuration object, but did not succeed. Find Below an implemented test case in node.js:

    var axios = require('axios');
    var fs = require('fs');
    var path = require('path')
    enter code here`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)
        }
    }
    )();

In my case, the pdf file is 20 MB, upon running, an error is thrown. "Error: Request body larger than maxBodyLength limit"

I tried to setting the maxContentLength: 100000000, maxBodyLength: 1000000000 as presented above, but did not succeed.

Your help is appreciated.


回答1:


The maxBodyLength seems to work for me in this simple test, I upload data to a local Express server. If I try to upload more than the maxBodyLength I get the same error you're getting. So I suspect there's something more, like a redirect happening in your case that's triggering the error.

There is an issue logged for axios here that seems to reference the problem, it suggests setting maxContentLength to Infinity (as the other commenter suggests).

e.g.

maxContentLength: Infinity,
maxBodyLength: Infinity

Test code below:

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);

Corresponding server code:

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}`);


来源:https://stackoverflow.com/questions/58655532/increasing-maxcontentlength-and-maxbodylength-in-axios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!