HTTP Content-Length header 计算 javascript
HTTP Content-Length header calculation in javascript
我是 javascript 和 node-js 的新人。我在调用休息端点时遇到问题。我的问题是当我尝试使用 Postman 调用端点时一切正常。我可以在 Postman 控制台中看到计算出的 Content-Length header。但是,当我尝试在 javascript 中调用相同的端点时,出现了错误,因为计算出的 Content-Length 比 Postman 计算出的要低一点。这是我用来调用端点的 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 的值对值进行硬编码时,一切正常。
form-data 存储库中的 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 实例。
我是 javascript 和 node-js 的新人。我在调用休息端点时遇到问题。我的问题是当我尝试使用 Postman 调用端点时一切正常。我可以在 Postman 控制台中看到计算出的 Content-Length header。但是,当我尝试在 javascript 中调用相同的端点时,出现了错误,因为计算出的 Content-Length 比 Postman 计算出的要低一点。这是我用来调用端点的 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 实例。