将二进制数据发送到AmazonS3(Javascript)
Sending binary data to Amazon S3 (Javascript)
AmazonS3将我的二进制数据解释为非UTF-8,并在写入bucket时对其进行修改。
使用官方s3 Javascript客户端的示例:
var png_file = new Buffer( "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==", "base64" ).toString( "binary" );
s3.putObject( {
Bucket: bucket,
Key: prefix + file,
ContentType: "image/png;charset=utf-8",
CacheControl: "public, max-age=31536000",
Body: png_file
// , ContentLength: png_file.length
}, function( e ){
if ( e ) {
console.log( e );
} else {
s3.getObject( {
Bucket: bucket,
Key: prefix + file
}, function( e, v ) {
if ( e ) {
console.log( e )
} else {
console.log( v.ContentLength );
}
} );
}
} );
返回105
,而原始png_file
为85
。S3以某种方式修改了我的文件,我认为这与字符集有关。
如果我取消对Content-Length
行的注释,我会在putObject()
:The Content-MD5 you specified did not match what we received
上得到一个400错误。
如果我自己用ContentMD5: crypto.createHash("md5").update(png_file).digest("base64")
计算MD5散列(而不是让S3库来计算),我会得到同样的结果。这似乎承认了我发送的数据和S3接收的数据之间的差异。
我读过一期类似标题的文章,但它并没有解决问题。
S3 putObject()
采用Buffer或UTF-8字符串。我应该按原样发送二进制文件,而不是"二进制字符串",这意味着使用new Buffer(...)
而不是new Buffer(...).toString("binary")
。
S3似乎不太可能真正修改您正在上传的内容。它似乎不太可能在下载时被错误地解释,因为这似乎对png:无效
ContentType: "text/data;charset=utf-8",
这对于png文件来说是不正确的。我建议这就是你想要的:
ContentType: "image/png",
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 将二进制数据发送到AmazonS3(Javascript)
- 如何在保存在amazons3中的html页面上引用外部javascript库
- amazons3-只使用Javascript将大的JSON字符串转储到s3
- 使用javascript sdk的amazons3上传不起作用
- 从AmazonS3自动打包Javascript/CSS
- amazons3-aws-sdk for javascript是否支持多部分"下载“;从S3开始