【问题标题】:Blob Storage Images - AzureBlob 存储映像 - Azure
【发布时间】:2018-06-26 21:05:42
【问题描述】:

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

    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();
        }

    }

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

我想要的 => Correct
我不想要的 => Incorrect

【问题讨论】:

  • 你有 azure storage 桌面应用吗?
  • 不,服务是 azure blob 存储,但我的应用会将图像上传到该存储
  • 是的,有一个桌面应用程序可以方便地监控 azure blob 存储。
  • @NevilleNazerane 是的,通过桌面 y 通过门户是可以的。问题是当我的 web api 方法上传图像时
  • 该应用程序帮助我调试了几个此类问题。不管怎样,看看我的回答,这应该可以帮助你找出你的问题

标签: blob azure-blob-storage blobstorage


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    正如 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;
    

    【讨论】:

    • 一般获取格式包括"images/"部分
    猜你喜欢
    • 2019-04-03
    • 2020-10-08
    • 2018-07-11
    • 2017-11-10
    • 1970-01-01
    • 2018-11-21
    • 2012-03-02
    • 2016-03-04
    • 2012-03-04
    相关资源
    最近更新 更多