Node.js 我如何让我的Express应用程序在上传时尊重EXIF数据?
我有一个Express应用程序,用于将图像上传到S3存储桶。我没有做任何特别的事情,只是直接上传,但当它们显示在浏览器中时,一些iPhone图像是横向的 我知道这在技术上是一个浏览器错误,Firefox现在支持这一规则,但Chrome仍然会在浏览器一侧显示图像Node.js 我如何让我的Express应用程序在上传时尊重EXIF数据?,node.js,express,image-processing,Node.js,Express,Image Processing,我有一个Express应用程序,用于将图像上传到S3存储桶。我没有做任何特别的事情,只是直接上传,但当它们显示在浏览器中时,一些iPhone图像是横向的 我知道这在技术上是一个浏览器错误,Firefox现在支持这一规则,但Chrome仍然会在浏览器一侧显示图像 有没有办法让Express读取EXIF数据,并在上传之前旋转它们?是的,我找到了。我使用了和API的组合 首先,我使用Load Image从exif数据获取图像的方向并旋转它。然后,我将转换Load Image提供的画布输出,并将其转换为
有没有办法让Express读取EXIF数据,并在上传之前旋转它们?是的,我找到了。我使用了和API的组合 首先,我使用Load Image从exif数据获取图像的方向并旋转它。然后,我将转换Load Image提供的画布输出,并将其转换为blob(您可能还需要iOS的
.toBlob()
,因为它还不支持此功能)
然后将该blob附加到FormData
对象,我还将其放回DOM中进行文件预览
// We need a new FormData object for submission.
var formData = new FormData();
// Load the image.
loadImage.parseMetaData(event.target.files[0], function (data) {
var options = {};
// Get the orientation of the image.
if (data.exif) {
options.orientation = data.exif.get('Orientation');
}
// Load the image.
loadImage(event.target.files[0], function(canvas) {
canvas.toBlob(function(blob) {
// Set the blob to the image form data.
formData.append('image', blob, 'thanksapple.jpg');
// Read it out and stop loading.
reader.readAsDataURL(blob);
event.target.labels[0].innerHTML = labelContent;
}, 'image/jpeg');
}, options);
reader.onload = function(loadEvent) {
// Show a little image preview.
$(IMAGE_PREVIEW).attr('src', loadEvent.target.result).fadeIn();
// Now deal with the form submission.
$(event.target.form).submit(function(event) {
// Do it over ajax.
uploadImage(event, formData);
return false;
});
};
});
现在,我使用jQuery的AJAX方法实现uploadImage
函数。注意processData
和contentType
标志,它们很重要
function uploadImage(event, formData) {
var form = event.target;
$.ajax({
url: form.action,
method: form.method,
processData: false,
contentType: false,
data: formData
}).done(function(response) {
// And we're done!
});
// Remove the event listener.
$(event.target).off('submit');
}
所有的信息都在那里,但它分布在多个资源中,希望这将节省人们大量的时间和猜测