【问题标题】:HTTP Content-Length header calculation in javascriptjavascript中的HTTP Content-Length标头计算
【发布时间】:2021-01-08 14:10:56
【问题描述】:

我是 javascript 和 node-js 的新手。我在调用休息端点时遇到问题。我的问题是当我尝试使用 Postman 调用端点时一切正常。我可以在 Postman 控制台中看到计算出的 Content-Length 标头。但是当我尝试在 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 的值对值进行硬编码时,一切正常。

【问题讨论】:

    标签: javascript node.js http axios coffeescript


    【解决方案1】:

    表单数据存储库中的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 实例提供正确的文件长度.

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多