无法设置内容类型

时间:2019-08-05 06:40:39

标签: azure azure-blob-storage

我正在尝试将图像保存到天蓝色的blob存储中。我通过代码设置了内容类型,如下所示,但是它已经准备好但尚未上传。我该怎么办?

文件上传代码:

[HttpPost("ListFiles")]
public async Task<List<string>> InsertFile(List<IFormFile> asset)
{
    try
    {
        var urlList = new List<string>();
        foreach (var op in asset)
        {


            if (CloudStorageAccount.TryParse(_config.Value.StorageConnection, out CloudStorageAccount storageAccount))
            {
                CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

                CloudBlobContainer container = blobClient.GetContainerReference(_config.Value.Container);

                  var postedFileExtension = Path.GetExtension(op.FileName);
                var img = $@"{Guid.NewGuid()}" + postedFileExtension;
                CloudBlockBlob blockBlob = container.GetBlockBlobReference(img);
                CloudBlockBlob cloudBlockBlob = container.GetBlockBlobReference(img);
                cloudBlockBlob.Properties.ContentType = op.ContentType;
                await blockBlob.UploadFromStreamAsync(op.OpenReadStream());
                var blob = container.GetBlockBlobReference(img);

                urlList.Add(blob.Uri.AbsoluteUri);
            }

        }
        return urlList;
    }
    catch (Exception e)
    {
        throw e;
    }
}

2 个答案:

答案 0 :(得分:1)

要在上传Blob时设置内容类型,只需在调用upload方法之前设置ContentType属性即可。以下是我的测试代码,您可以尝试一下。

static void Main(string[] args)
    {
        String strorageconn = "storage string";
        CloudStorageAccount storageacc = CloudStorageAccount.Parse(strorageconn);

        //Create Reference to Azure Blob
        CloudBlobClient blobClient = storageacc.CreateCloudBlobClient();

        CloudBlobContainer container = blobClient.GetContainerReference("test");

        CloudBlockBlob blockBlob = container.GetBlockBlobReference("test.jpg");

        blockBlob.Properties.ContentType = "image/jpg";

        using (var filestream = System.IO.File.OpenRead(@"D:\Picture\test.jpg"))
        {

            blockBlob.UploadFromStream(filestream);

        }
    }

然后使用Storage Explorer读取属性,结果如下。

enter image description here

答案 1 :(得分:1)

您当前正在使用

var postedFileExtension = Path.GetExtension(op.FileName);
var img = $@"{Guid.NewGuid()}" + postedFileExtension;

CloudBlockBlob blockBlob = container.GetBlockBlobReference(img);
CloudBlockBlob cloudBlockBlob = container.GetBlockBlobReference(img);
cloudBlockBlob.Properties.ContentType = op.ContentType;

await blockBlob.UploadFromStreamAsync(op.OpenReadStream());
var blob = container.GetBlockBlobReference(img);

您正在设置变量的ContentType属性,但不将此更改提交给Azure。将代码更新为:

var postedFileExtension = Path.GetExtension(op.FileName);
var img = $@"{Guid.NewGuid()}" + postedFileExtension;

CloudBlockBlob blockBlob = container.GetBlockBlobReference(img);  
blockBlob.Properties.ContentType = op.ContentType;

await blockBlob.UploadFromStreamAsync(op.OpenReadStream());
var blob = container.GetBlockBlobReference(img);

Console.WriteLine(blob.Properties.ContentType); // Output the contentType