亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Axios 中增加 maxContentLength 和 maxBodyLength

在 Axios 中增加 maxContentLength 和 maxBodyLength

慕村225694 2021-12-12 16:06:59
我正在使用“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)        }    }    )();就我而言,pdf 文件是 20 MB,運行時會拋出錯誤?!板e誤:請求正文大于 maxBodyLength 限制”我嘗試設置 maxContentLength: 100000000, maxBodyLength: 1000000000 如上所述,但沒有成功。感謝您的幫助。
查看完整描述

1 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

在這個簡單的測試中,maxBodyLength 似乎對我有用,我將數據上傳到本地 Express 服務器。如果我嘗試上傳超過 maxBodyLength 的內容,我會收到與您相同的錯誤。所以我懷疑還有更多的東西,比如在你的情況下發生的重定向觸發了錯誤。


此處記錄的 axios 問題似乎引用了該問題,它建議將 maxContentLength 設置為 Infinity(正如其他評論者所建議的那樣)。


例如


maxContentLength: Infinity,

maxBodyLength: Infinity

測試代碼如下:


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

對應的服務器代碼:


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


查看完整回答
反對 回復 2021-12-12
  • 1 回答
  • 0 關注
  • 1678 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號