Ich verwende ImageMagick, um Thumbnails meiner Fotos auf S3 zu erstellen. Dies ist der Ablauf:MIME auf Anwendung/Oktett in AWS S3 eingestellt, wenn binärer Puffer verwendet wird
- Holen Sie sich das Bild von S3.
- Machen Sie Thumbnail aus der
data.Body
. - Setzen Sie das Thumbnail auf S3.
Hier ist die Make Thumbnail-Funktion:
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;
}
Das image
Objekt ist von der Form, dass S3 SDK, um es erwartet:
var image = {
Bucket: 'bucket name',
Key: 'object key',
Body: 'body',
ContentType: 'image/png'
};
Doch wenn die Miniaturansicht auf S3 setzen , der MIME ist aus irgendeinem Grund auf application/octet-stream
eingestellt. Beim Herunterladen des Thumbnails öffnet es sich wie jedes andere Bild, aber die Browser behandeln es nicht wie ein Bild und das ist ein Problem für mich.
Was verursacht dieses Problem? und wie kann ich es lösen?
Dank
Es ist schwer, aus dem Code zu sagen, Sie gepostet haben, wo/wann/wie die Content wird eingestellt und wie Sie das sind bestätigt ... aber wenn Es ist wirklich auf image/png eingestellt, wenn Sie den Upload tatsächlich durchführen, der beim Hochladen beibehalten, in den S3-Metadaten festgelegt und wie erwartet zum Browser zurückgeleitet werden soll. –
Ich hoffe, Sie haben Recht, aber die Dokumentation schlägt vor, dass der Inhaltstyp von der Inhaltscodierung abgeleitet werden kann, die in meinem Fall binär ist. Daher dachte ich, dass meine explizite Deklaration des Inhaltstyps überschrieben wird, sobald S3 sdk feststellt, dass die Kodierung binär ist. – johni
Ich bin ziemlich sicher, dass, wenn ein 'Content-Type:' HTTP-Request-Header an S3 gesendet wird, wenn ein Objekt hochgeladen wird, dieser Wert beim Anfordern von Objekten an den Browser zurückgegeben wird. Ich habe meine eigenen Bibliotheken für AWS geschrieben, verwende die SDKs nicht sehr oft, daher bin ich "nur" wirklich mit dem Verhalten des eigentlichen S3-Dienstes vertraut, nicht mit dem SDK selbst. Ich bin mir nicht sicher, wie die Art der Codierung wirklich möglich oder wünschenswert wäre. S3 selbst honoriert nur die Anweisungen, die gesendet werden - kein Denken passiert. (Die Konsole kann MIME-Typen herausfinden, wenn Sie dort Dateien hochladen, aber die Konsole macht das, nicht S3). –