上传是剥离图像元数据MVC5

时间:2014-08-18 19:29:06

标签: c# asp.net-mvc http post

我有一个简单的文件上传,用于将图像添加到我们的业务应用程序中的记录。问题是文件上传后我在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,用于修复方向等。

1 个答案:

答案 0 :(得分:0)

在设置属性之前从azure存储中获取属性可能有助于在上传图像时保留exif数据。

CloudBlockBlob blob = sampleContainer.GetBlockBlobReference(photo.FileName);
blob.FetchAttributes();
blob.Properties.ContentType = "image/jpg";
blob.SetProperties();

在上传之前,请确保该图片包含必要的 Exif 数据。 (在我的情况下,我通过聊天应用程序发送图像,实际上从图像中删除了Exif数据。) 请参阅this blog了解更多信息