我有一个简单的文件上传,用于将图像添加到我们的业务应用程序中的记录。问题是文件上传后我在C#控制器中没有图像的EXIF数据。我没有做任何特别的事情:
HTML
<form action="/Image/Upload" method="post" enctype="multipart/form-data">
<input type="file" class="form-control" style="width:80%" name="photo" accept="image/*" capture="camera" />
<input type="hidden" name="clientid" id="hvClientid" />
<input type="submit" class="btn btn-primary btn-xs" value="Upload"/>
</form>
控制器
[HttpPost]
public ActionResult Upload(HttpPostedFileBase photo, FormCollection items)
{
string clientId = items[0].ToString();
var tempimg = Image.FromStream(photo.InputStream);
if (ImageTools.DetermineIfImageSizeAboveMax(tempimg))
tempimg = ImageTools.Resize(tempimg, ImageTools.ImageSize.Large);
var exif = new EXIF();
var img = exif.FixOrientation(tempimg);
var azure = new Azure.Blob.Consumer.StorageConsumer(clientId, Azure.StorageBase.MyApp);
var tempUri = azure.CacheImage(img, photo.FileName);
return Json(new { path = tempUri });
}
tempimg变量不包含原始文件中存在的所有EXIF元数据。 EXIF类只是我编写的一个lib,用于修复方向等。
答案 0 :(得分:0)
在设置属性之前从azure存储中获取属性可能有助于在上传图像时保留exif数据。
CloudBlockBlob blob = sampleContainer.GetBlockBlobReference(photo.FileName);
blob.FetchAttributes();
blob.Properties.ContentType = "image/jpg";
blob.SetProperties();
在上传之前,请确保该图片包含必要的 Exif 数据。 (在我的情况下,我通过聊天应用程序发送图像,实际上从图像中删除了Exif数据。) 请参阅this blog了解更多信息