当我将二进制数据写入Amazon S3存储桶时,它会将其解释为非UTF-8格式并进行修改。
以下是使用官方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 );
}
} );
}
} );
当原始的png_file
为85
时,返回105
。 S3以某种方式修改了我的文件,我认为这与字符集有关。
如果取消注释Content-Length
行,则在putObject()
上会出现400错误:The Content-MD5 you specified did not match what we received
。
如果我使用ContentMD5:crypto.createHash("md5").update(png_file).digest("base64")
计算MD5哈希值(而不是让S3库执行它),则会得到相同的结果。这似乎确认了我发送的数据与S3接收到的数据之间的差异。
我阅读了一个类似标题的问题,但没有解决问题。
;charset=utf-8
都不会修改输出结果。 - ehmicky