私はImageMagickを使用して、S3で自分の写真のサムネイルを作成しています。 これは流れです:バイナリバッファを使用すると、MIMEがAWS S3のアプリケーション/オクテットに設定される
- S3から画像を取得します。
data.Body
からサムネイルを作成します。- サムネイルをS3に挿入します。ここで
メイクサムネイル機能である:
function makeThumbnail(image) {
var defer = q.defer();
im.resize({
srcData: image.Body,
width: 256
}, function (err, stdout) {
if (err) {
defer.reject(err);
} else {
image.Key.replace(/^images/, "thumbs");
image.Body = new Buffer(stdout, 'binary');
defer.resolve(image);
}
});
return defer.promise;
}
image
オブジェクトは、S3 SDKはそれを得ることを想定している形式は次のとおりです。
var image = {
Bucket: 'bucket name',
Key: 'object key',
Body: 'body',
ContentType: 'image/png'
};
、S3上のサムネイルを入れたときに何らかの理由でMIMEがapplication/octet-stream
に設定されています。サムネイルをダウンロードするときに他の画像のように開きますが、ブラウザは画像のように扱わず、それが問題です。
この問題の原因を教えてください。どのように私はそれを解決することができますか?
おかげ
それは/ときContentTypeをが設定されますとどのようにあなたがそれを確認しているか/ ...しかし、もしあなたが投稿したコードから言うのは難しいです実際にアップロードを行うときにはイメージ/ pngに設定されています。これはアップロード時に維持し、S3メタデータに設定して、期待どおりにブラウザに戻します。 –
私はあなたが正しいと思っていますが、ドキュメンテーションは、私の場合はバイナリであるコンテンツのエンコーディングからコンテンツタイプを導き出すことを示唆しています。そのため、私は、S3のsdkがエンコーディングがバイナリであることに気付くと、コンテンツタイプの明示的な宣言が上書きされていると考えました。 – johni
私は、オブジェクトがアップロードされたときにS3に 'Content-Type:' HTTPリクエストヘッダが送られた場合、オブジェクトを要求するときにその値がブラウザに返されることを確信しています。 AWS用の独自のライブラリを作成しましたが、SDKを頻繁に使用しないでください.SDK自体ではなく、実際のS3サービスの動作に「本当に」慣れています。エンコーディングからどのように型を引き出すのが本当に可能か望ましいかはわかりません。 S3自体は送信される指令を尊重するだけのものであり、思考は起こりません。 (コンソールは、そこにファイルをアップロードするとMIMEタイプを認識することができますが、コンソールはS3ではありません)。 –