私の質問に対する満足のいく回答は見つかりません。画像URLがあれば、(ディスクに保存せずに)ダウンロードしてすぐにAWS Bucketにアップロードしたいと考えています。私のコードは次のとおりです。URLから画像をダウンロードしてAWSに直接アップロードしてください
self.downloadImage = function(url){
let response = HTTP.get(url, {
encoding:null // for binary
})
if (!response.headers['content-type'].split('/')[0] == 'image'){
throw new Error("not an image")
}
return {
data : response.content,
contentType : response.headers['content-type']
}
}
self.uploadImage = function(websiteName, imgUrl, callback){
// we retrieve the image
let image = downloadImage(imgUrl)
let imageName = self.extractImageName(imgUrl)
let filename = 'img/' +websiteName + "/" + imageName
let newUrl = `https://s3.${Meteor.settings.AWS.REGION}.amazonaws.com/${Meteor.settings.S3.BUCKET_NAME}/${filename}`
// makes the async function sync like
let putObjectSync = Meteor.wrapAsync(s3Client.putObject, s3Client)
try{
let res = putObjectSync({
Body: image.data,
ContentType : image.contentType,
ContentEncoding: 'base64',
Key: filename,
ACL:'public-read',
Bucket: Meteor.settings.S3.BUCKET_NAME
})
return newUrl
} catch(e) {
return null
}
}
画像が壊れているような場合を除いて、すべて正常に動作します。これまでのところ私が試した:
画像
それを使用するとのテキストの内容を渡さないための良い戦略と思われ、ダウンロードする際
null
にエンコーディングを設定するために、aldeed:http
を使用します応答を直接アップロード体としてAWS
Sにbase64エンコーディングを追加します堕落するまで私はソリューションに非常に近い感じがします。画像は正しいタイプとファイルサイズですが、ブラウザやコンピュータでは印刷されません。どのように正しくデータをエンコード/取得するかについての任意のアイデア?