JavaScript中的HTTP Content-Length标头计算

问题描述

我是javascript和node-js的新手。我在调用其他端点时遇到问题。我的问题是,当我尝试使用Postman调用端点时,一切正常。我可以在Postman控制台中看到计算出的Content-Length标头。但是,当我尝试在javascript中调用相同的端点时,出现了错误,因为计算出的Content-Length略低于Postman计算出的Content-Length。这是我用来调用端点的node.js代码。请注意,该API是用于上传文件的多部分API。

file = fs.readFileSync('/Users/.../Documents/doc.pdf')
form = new FormData()
form.append('file',file)
headers = Object.assign({'Content-Length': form.getLengthSync() },form.getHeaders())
config = {
    method: 'post',url: 'https://staging:...',headers: headers,data : form
};
axios(config).then((res) ->
        console.log("The file is posted successfully. status is : " + res.status)
    ).catch((err) -> 
        console.log("The error occurred in posting file : " + err)
    )

您能告诉我这里缺少什么吗?例如,对于我正在测试的特定文件,邮递员的计算值为388,但对于同一文件,代码将其计算为379。 注意:当我用Postman的值对值进行硬编码时,一切正常。

解决方法

表单数据存储库中的

Issue #426似乎描述了您的问题的解决方案。

我在本地进行了尝试,并通过应用问题中的内容设法获得了预期的结果:

const filePath = '/Users/.../Documents/doc.pdf';
const form = new FormData();
let options = {
  knownLength: fs.statSync(filePath).size
}
form.append(
  'file',fs.createReadStream(filePath),options,);

我收集到的问题与getLengthSync specification中的声明有关,该声明指出未计算流长度',因此必须采取额外的步骤才能为文件提供正确的文件长度FormData实例。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...