Amazon S3는 내 이진 데이터를 비 UTF-8로 해석하고 버킷에 쓸 때이를 수정합니다. 공식 S3 자바 스크립트 클라이언트를 사용하여Amazon 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가 어떻게 든 내 파일을 수정하고 charset과 관련이 있다고 생각합니다.
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가받는 데이터의 차이점을 인정하는 것 같습니다.
나는 similarly titled issue을 읽었지만 문제를 해결하지 못했습니다.
죄송합니다. 이것은 저의 오타였습니다. 원래의 질문을 업데이트했습니다. '; charset = utf-8'을 추가하거나하지 않으면 출력을 수정하지 않습니다. – ehmicky
@ehmicky는 내 대답을 수락 해 주셔서 감사합니다. 그러나 문제가 해결되지 않았다고 생각합니다. 오타가 발견되었지만 실제 문제를 발견하고 해결 한 것으로 보입니다. 자신의 답을 수락하는 것은 괜찮습니다. 특히, 실제로 문제를 직접 해결 한 경우와 다른 해결책 중 어느 것도 실제 해결책을 제시하지 않은 경우에 특히 그렇습니다. 체크 표시를 다시 클릭하여 내 대답을 "취소"할 수 있습니다. –