Blob存储图像 - Azure

时间:2018-01-17 21:33:14

标签: blob azure-blob-storage blobstorage

我通过web api上传到我的blob存储中的公共容器的图像存在一些问题。问题是我需要通过我的api上传的图像必须是可浏览的,我的意思是当把公共链接放在浏览器中时你可以在浏览器中看到图像,但实际的行为是当我把链接放到图像上时下载图像,并没有在浏览器中显示任何东西但是当我通过天蓝色的门户上传图像我可以看到我想要的图像....我公开我的容器,我不知道还能做什么。 ...我上传图片的代码是:

    private readonly CloudBlobContainer blobContainer;

    public UploadBlobController()
    {
        var storageConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
        var storageAccount = CloudStorageAccount.Parse(storageConnectionString);
        var blobClient = storageAccount.CreateCloudBlobClient();
        blobContainer = blobClient.GetContainerReference("messagesthredimages");
        blobContainer.CreateIfNotExists();
        blobContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
    }

    [HttpPost]
    [Route("UploadImagetoBlob")]
    public async Task<IHttpActionResult> UploadImagetoBlob()//string imagePath
    {
        try
        {
            var image = WebImage.GetImageFromRequest();
            var imageBytes = image.GetBytes();
            var blockBlob = blobContainer.GetBlockBlobReference(image.FileName);
            blockBlob.Properties.ContentType = "messagesthreadimages/" + image.ImageFormat;
            await blockBlob.UploadFromByteArrayAsync(imageBytes, 0, imageBytes.Length);
            return Ok(blockBlob.Uri.ToString());
        }
        catch (Exception)
        {
            return BadRequest();
        }

    }

例子,我希望有人可以帮助我。

我想要的=&gt; Correct
我不想要的=&gt; Incorrect

2 个答案:

答案 0 :(得分:1)

我之前遇到过同样的问题。浏览器在不知道格式(文件类型)时下载文件。如果使用桌面应用程序监视文件(不确定此选项在门户中的位置),您将找到文件类型。

这些文件类型是根据您设置的blockBlob.Properties.ContentType设置的。您需要检查并检查image.ImageFormat返回的确切内容。如果此值设置为"image/jpeg",浏览器将仅显示图像。但是,由于您使用的是"messagesthreadimages/" + image.ImageFormat,因此可能会设置"messagesthreadimages/image/jpeg"

答案 1 :(得分:1)

正如Neville所说,当你调用像BlockBlob.Properties.ContentType这样的SetProperties方法时,你会有一些误解。

Content-Type表示消息内容的媒体类型。

图片内容类型允许标准化图片文件包含在邮件中。有关详细信息,请参阅此link

image/g3fax [RFC1494]
image/gif [RFC1521]
image/ief (Image Exchange Format) [RFC1314]
image/jpeg [RFC1521]
image/tiff (Tag Image File Format) [RFC2301]

我读了这个article,似乎你会自定义图像的ContentType。 所以,你可以改变代码如下:

blockBlob.Properties.ContentType = "image/" + image.ImageFormat;