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

点击上方蓝字关注“汪宇杰博客”

导语

前不久我写了一篇《尝鲜新版 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 信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊程序员的成长与价值提升

一、 回顾我的职场体会我的职场生涯开始于十年前,一直在中小企业发展,未曾有幸到沿海那些高速发展的互联网公司工作,也就错过了互联网的大时代。但这不影响我的正常工作生活,事实上无论你身在何处,或在哪家公司&#x…

本地Jupyter连接远程linux服务器

连接的前提是本地装好了Jupyter,以及远程的服务器也配置好了。 先连接远程的Linux服务器,输入脚本命令: jupyter notebook得到执行结果: [I 14:29:11.290 NotebookApp] Serving notebooks from local directory: /home/ubuntu …

PowerBI 2019.12更新完美收官2019

PowerBI 的2019年12月更新来了。终于 PowerBI 完成了在 2019 年的进化。对于 12 月来说,最大的更新就是提供了主题设置,这使得我们彻底摆脱编写一个从来都不应该编写的JSON来设置主题文件。下面我们分别来详细介绍。自定义主题首先你需要打开预览&#x…

Task.CompletedTask和Task.Result小记

在任何返回Task的方法中,如果可以在不进行异步的情况下计算结果,则最好避免使用Task.Run。例如,一个简短的计算函数,或者测试中返回了一个预先计算过的结果,则无需使用Task.Run。例如,定义了一个返回Task的…

Dapr 运用之集成 Asp.Net Core Grpc 调用篇

前置条件: 《Dapr 运用》改造 ProductService 以提供 gRPC 服务从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包Grpc.AspNetCore配置 Http/2gRPC 服务需要 Http/2 协议public static IHostBuilder CreateHostBuilder(string[] args) {return Host.CreateDefault…

蓝桥杯 印章拿金币

今日心得 对于大数组的定义要放在main函数外&#xff0c;否则会报错认真思考动态规划的边界设置&#xff0c;不是机械地设置1或0 动态转移方程&#xff1a; dp[i][j] dp[i-1][j]*j/n dp[i-1][j-1]*(n-j1)/n;参考代码 #include<bits/stdc.h> using namespace std;int…

ASP.NET Core Web API 最佳实践指南

原文地址&#xff1a; ASP.NET-Core-Web-API-Best-Practices-Guide介绍当我们编写一个项目的时候&#xff0c;我们的主要目标是使它能如期运行&#xff0c;并尽可能地满足所有用户需求。但是&#xff0c;你难道不认为创建一个能正常工作的项目还不够吗&#xff1f;同时这个项目…

蓝桥杯 砝码称重

试题&#xff1a; 思路&#xff1a; 经典的0-1背包问题&#xff0c;这题坑的地方在于方案数会超过边界&#xff0c;当发现当前重量可行时&#xff0c;直接归为1&#xff0c;防止dp数组累加时溢出。或者最后统计的时候&#xff0c;将判断条件从if(dp[n][i])>0改为if(dp[n][i…

[小技巧]你真的了解C#中的Math.Round么?

今天在某.NET Core 群中看到有人在问Math.Round的问题。其实这个问题之前有很多人遇到了&#xff0c;在此总结一下。开发者为了实现小数点后 2 位的四舍五入&#xff0c;编写了如下代码&#xff0c;var num Math.Round(12.125, 2);代码非常的简单&#xff0c;开发者实际得到的…

蓝桥杯 左baby右兄弟

试题&#xff1a; 思路&#xff1a; “左孩子右兄弟”是常见的多叉树转化成二叉树的方法。具体的实现方式是&#xff0c;从第二层最右边的结点开始&#xff0c;将将自己的孩子结点放到左边&#xff0c;左边一位的兄弟放到左边的结点上。对于是多支的孩子先递归转成一支树。 本…

一文带你了解如何打造持续学习文化

一个学习型组织&#xff0c;必须是通过致力于不懈地改进和促进创新的文化来实现的。持续学习文化能力描述了一套鼓励个人和整个企业不断增长知识、能力、绩效和创新的价值观和实践。它是精益企业的七个核心能力之一&#xff0c;每一个都是实现业务敏捷的关键点。为什么要持续学…

蓝桥杯 数字三角形 贪心+动态规划

参考代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; int data[105][105];int main() {ios::sync_with_stdio(false);int n;cin >> n;for(int i 1; i < n; i){for(int j 1; j < i; j){cin >> data[i][j];}}int…

【.NET Core 跨平台 GUI 开发】第三篇:Gtk# 表格布局与事件处理

除了使用 HBox 和 VBox 进行布局外&#xff0c;还可以使用 Table 对象进行布局。这个有点像 html 的 table&#xff0c;适合方方正正大小差不多的空间集合。本篇将会对 Table 布局进行讲解&#xff0c;利用 Table 做出一个计算器的界面并使其可以响应按钮点击并将点击的按钮内容…

如何构建知识体系

大家好&#xff0c;我是Z哥。不知道你有没有过这样的感觉&#xff0c;那些比你更厉害的人&#xff0c;在一件事中往往可以轻易地从一个「点」延展出一条「线」&#xff0c;甚至一个「面」的知识点。对我们真实感受的冲击是&#xff0c;在大局观上被碾压&#xff0c;相比之下觉得…

蓝桥杯 递增序列

思路&#xff1a; 这道题一开始想复杂了&#xff0c;其实这么小的数据量直接暴力求解即可。 参考代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; int m 30, n 50;bool checkL(int x, int y) //判断坐标是否超出边界 {if(x &g…

使用DbContextPool提高EfCore查询性能

长话短说上个月公司上线了一个物联网数据科学项目&#xff0c;我主要负责前端接收设备Event&#xff0c;并提供模型参数下载&#xff08;数据科学团队会优化参数&#xff09;。WebApp部署在Azure&#xff0c;模型参数使用Azure SQL Server存储。最近从灰度测试转向全量部署之后…

蓝桥杯 分巧克力 二分

#include<bits/stdc.h> using namespace std; typedef long long ll; ll n, k; vector<ll> width, height;bool check(ll length) //判断边长为length的正方形都否满足需求 {ll sum 0; //记录能切成的最大方块数 for(int i 0; i < n; i){sum (width[i] / …

[原]调试实战——程序CPU占用率飙升,你知道如何快速定位吗?

前言 如果我们自己的程序的CPU Usage&#xff08;CPU占用率&#xff09;飙升&#xff0c;并且居高不下&#xff0c;很有可能陷入了死循环。你知道怎么快速定位并解决吗&#xff1f;今天跟大家分享几种定位方法&#xff0c;希望对你有所帮助。如何判断是否有死循环&#xff1f; …

蓝桥杯 迷宫

参考代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; int e[55][55], vis[55][55]; //e矩阵表示障碍物信息&#xff0c;vis矩阵表示点是否被访问过 int m 30, n 50; struct node{ //定义结构体&#xff0c;用于存放点的信息 i…

ASP.NET Core基于K8S的微服务电商案例实践--学习笔记

摘要一个完整的电商项目微服务的实践过程&#xff0c;从选型、业务设计、架构设计到开发过程管理、以及上线运维的完整过程总结与剖析。讲师介绍产品需求介绍纯线上商城线上线下一体化跨行业跨商业模式从0开始&#xff0c;我们应该采用微服务吗&#xff1f;不适合采用微服务架构…