Amazon S3 интерпретирует мои двоичные данные как не-UTF-8 и изменяет его, когда я пишу в ведро.Отправка двоичных данных в Amazon S3 (Javascript)
Пример с использованием официального 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
, я получаю ошибку 400 на putObject()
: The Content-MD5 you specified did not match what we received
.
Получается тот же результат, если я сам вычислил хэш MD5 (вместо того, чтобы позволить библиотеке S3 сделать это) с ContentMD5: crypto.createHash("md5").update(png_file).digest("base64")
. Это, по-видимому, подтверждает разницу между данными, которые я отправляю, и тем, который получает S3.
Я прочел similarly titled issue, но это не решило проблему.
Извините, это была опечатка от меня. Я обновил исходный вопрос. Добавление или нет '; charset = utf-8' не изменяет результат. – ehmicky
@ehmicky благодарит за принятие моего ответа, но я не думаю, что я действительно решил проблему для вас - я только заметил опечатку, но вы, кажется, нашли настоящую проблему и решили ее. Принятие вашего собственного ответа в порядке, здесь, особенно в тех случаях, когда вы действительно решали проблему самостоятельно, и ни один из других ответов не предлагал фактическое решение. По-моему, вы можете «не принять» мой ответ, снова нажав галочку. –