前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >新款 Azure .NET SDK 如何设定 Content-Type

新款 Azure .NET SDK 如何设定 Content-Type

作者头像
Edi Wang
发布2020-02-11 18:35:21
6250
发布2020-02-11 18:35:21
举报
文章被收录于专栏:汪宇杰博客

导语

前不久我写了一篇《尝鲜新版 Azure .NET SDK》之后,使用了一段时间发现没爆,于是今天决定把博客的图片存储从旧版 SDK 迁移到新版 SDK,结果小收福报。

Content-Type

上传到 Azure Blob 的文件必须设置正确的 Content-Type (Mime Type),要不然就会加班收福报,曾经在我的《.NET Core 批量重置 Azure Blob Storage 的 mime type》解释过。因此,以下代码需要迁移到新版SDK。

var blockBlob = _container.GetBlockBlobReference(fileName);

// Why .NET Core doesn't have MimeMapping.GetMimeMapping()

string extension = Path.GetExtension(blockBlob.Uri.AbsoluteUri);

switch (extension.ToLower())

{

case ".jpg":

case ".jpeg":

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

break;

case ".png":

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

break;

case ".gif":

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

break;

default:

break;

}

await using (var fileStream = new MemoryStream(imageBytes))

{

await blockBlob.UploadFromStreamAsync(fileStream);

}

新版 SDK 的上传方法很简单,根据 GitHub 的 Readme,一般是这样的:

// Get a reference to a blob named "sample-file" in a container named "sample-container"

BlobClient blob = container.GetBlobClient(blobName);

// Upload local file

blob.Upload(filePath);

传送门:https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md#uploading-a-blob

那么 ContentType 去哪儿了?我一开始以为它现在能自动根据拓展名设置 ContentType,结果传上去的全是 application/octet-stream,爆到天上去。

新版 SDK 的文档和教程很少,Bing 没有什么卵用。996了半小时后,最终在官网的 API Reference 里找到了疑似对象:BlobHttpHeaders.ContentType

传送门:https://docs.microsoft.com/en-us/dotnet/api/azure.storage.blobs.models.blobhttpheaders.contenttype?WT.mc_id=AZ-MVP-5002809&view=azure-dotnet

BlobClient Upload 方法正好有个重载,能接受 BlobHttpHeaders 参数,于是我实验了一下,居然成功了:

BlobClient blob = _container.GetBlobClient(fileName);

// Why .NET Core doesn't have MimeMapping.GetMimeMapping()

var blobHttpHeader = new BlobHttpHeaders();

string extension = Path.GetExtension(blob.Uri.AbsoluteUri);

switch (extension.ToLower())

{

case ".jpg":

case ".jpeg":

blobHttpHeader.ContentType = "image/jpeg";

break;

case ".png":

blobHttpHeader.ContentType = "image/png";

break;

case ".gif":

blobHttpHeader.ContentType = "image/gif";

break;

default:

break;

}

await using (var fileStream = new MemoryStream(imageBytes))

{

var uploadedBlob = await blob.UploadAsync(fileStream, blobHttpHeader);

}

现在上传到 Azure Blob 里的文件能够获得正确的 Content-Type 信息。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档