gpt4 book ai didi

javascript - knox S3 上传损坏或 chop 的文件

转载 作者:搜寻专家 更新时间:2023-11-01 00:26:00 24 4
gpt4 key购买 nike

这是一个脑筋急转弯问题,我实际上知道答案。我悬赏它是因为它代表了一个有值(value)的 Node 编程安全提示(这是第一个提示)。

  • 提示2:在HTTP请求中,“Content-Length”头字段的单位是什么?

我正在使用

var knox = require('knox');
var s3 = knox.createClient({
key: ...,
secret: ...,
bucket: ...
});

// The bug is below:

var stringVal = JSON.stringify(<2d javascript array from a large spreadsheet>)

var req = s3.put(path + filename, {
'Content-Length': stringVal.length,
'Content-Type': 'application/json'
});
req.end(stringVal);

生成的上传内容被 chop 或损坏。我们有 stringVal.length === 322889,生成的 S3 项目大小与之匹配。但是下载并重新加载文件会生成长度为 322140 的字符串。在尝试 JSON.parse 字符串(可预见地)导致语法错误之前,在此过程中不会出现任何错误。

怎么了?

最佳答案

knox 模块 ( https://github.com/LearnBoost/knox/blob/master/lib/client.js ) 的源代码中,您可以了解到它使用标准的 http 请求。

req.writereq.end 默认从 'utf8' 转换字符串 (http://nodejs.org/api/http.html#http_request_end_data_encoding)。

所以真正发生的是,您通过设置字符串长度而不是“Content-Length”字段中的字节数,不小心切断了字符串的末尾。服务器丢弃所有比这更长的时间;所以当你解析字符串时你会得到一个错误。

最快的解决方法是:

'Content-Length': new Buffer(stringVal).length,

或者更快:只需删除“Content-Length”行。

关于javascript - knox S3 上传损坏或 chop 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com