我正在嘗試從外部 url 將影像上傳到 S3。
目前,我可以成功上傳檔案,但在下載并打開檔案后,我發現它已損壞。
這是我正在使用的代碼(得到的正是我用來獲取資源的代碼):
const got = require('got');
const Web3 = require('web3');
const s3 = new AWS.S3({
accessKeyId: AWS_ACCESS_KEY_ID,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
});
const response = await got('https://example.com/image.jpg');
const uploadedFile = await s3
.upload({
Bucket: 'my_bucket',
Key: 'images/',
Body: response.body,
ContentType: 'image/jpeg',
})
.promise();
我嘗試創建一個緩沖區,并使用 putObject 而不是上傳,但我最終得到的檔案在 S3 上只有幾個位元組。
uj5u.com熱心網友回復:
獲取物件的請求正在將其轉換為字串。幾乎無論你選擇做什么編碼都會破壞它,因為 JPG 是二進制資料,并不意味著用字串的編碼來表示。
該got庫的檔案指出:
編碼
型別:
string默認:
'utf8'用于回應資料的 setEncoding 的編碼。
要獲得 Buffer,您需要將 responseType 設定為 buffer。不要將此選項設定為 null。
換句話說,如果您將下載更改為:
const response = await got('https://example.com/image.jpg', {'responseType': 'buffer'});
您將通過將其編碼為字串來獲取并上傳 Buffer 物件,而無需更改它。
uj5u.com熱心網友回復:
將檔案上傳到 S3 時,您的密鑰錯誤:
Key: 'images/'
不可能是images/因為這會將影像上傳到代表檔案夾的物件。雖然這可能適用于 Windows/Mac 筆記本電腦上的本地檔案系統,但它不適用于物件存盤。它需要是代表檔案的鍵,例如:
Key: 'images/image.jpg'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315646.html
標籤:javascript 节点.js 亚马逊网络服务 亚马逊-s3
