aspnetcore两种上传图片(文件)的方式
aspnetcore上传图片也就是上传文件有两种方式,一种是通过form-data,一种是binary。
先介绍第一种form-data:
该方式需要显示指定一个IFormFile类型,该组件会动态通过打开一个windows窗口选择文件 及图片。

postman演示如上,代码如下:
[HttpPost]
[AllowAnonymous]
public IActionResult UploadFileByForm(IFormFile formFile)
{
var file = formFile;
if (file == null)
return JsonContent(new { status = "error" }.ToJson()); string path = $"/Upload/{Guid.NewGuid().ToString("N")}/{file.FileName}";
string physicPath = GetAbsolutePath($"~{path}");
string dir = Path.GetDirectoryName(physicPath);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
using (FileStream fs = new FileStream(physicPath, FileMode.Create))
{
file.CopyTo(fs);
} string url = $"{_configuration["WebRootUrl"]}{path}";
var res = new
{
name = file.FileName,
status = "done",
thumbUrl = url,
url = url
}; return JsonContent(res.ToJson());
}
第二种通过binary

同样是打开windows窗口选择文件,不过这里不需要参数显式指定IFormFile
看代码就明白了,这里通过请求上下文的body来读取字节流,如果有提示不能同步读取流的话,需要指定 services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true);现在都不用iis,所以不介绍了。
/// <summary>
/// 上传图片 binary模式
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public IActionResult UploadImage()
{
var request = HttpContext.Request;
var stream = new BinaryReader(request.Body);
var body = stream.ReadBytes(1024*1024*5);
return File(body, @"image/jpeg"); }
aspnetcore7提供了如下的方式,通过指定本地文件绝对地址来读取字节流,应该算是第二种方式吧。
代码如下:参考:ASP.NET Core 7.0 的新增功能 | Microsoft Learn 需要引入包SixLabors.ImageSharp、SixLabors.ImageSharp.Formats.Jpeg
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Processing; var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/process-image/{strImage}", (string strImage, HttpContext http, CancellationToken token) =>
{
http.Response.Headers.CacheControl = $"public,max-age={TimeSpan.FromHours(24).TotalSeconds}";
return Results.Stream(stream => ResizeImageAsync(strImage, stream, token), "image/jpeg");
}); async Task ResizeImageAsync(string strImage, Stream stream, CancellationToken token)
{
var strPath = $"wwwroot/img/{strImage}";
using var image = await Image.LoadAsync(strPath, token);
int width = image.Width / 2;
int height = image.Height / 2;
image.Mutate(x =>x.Resize(width, height));
await image.SaveAsync(stream, JpegFormat.Instance, cancellationToken: token);
}
总结:上传文件或图片没有什么难度,只不过注意输出输入的格式就行了。如果需要多文件的话IFormFileCollection就行了, 这里不做介绍,可以看看微软的官方文档。
aspnetcore两种上传图片(文件)的方式的更多相关文章
- 两种mysql文件安装方式——win7 32位OS
官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的. 1. .ZIP格式安装 http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345 ...
- 两种常用文件分享方式 - 网络硬盘快速分享, 点对点的文件共享 BitTorrent Sync
普通的用户经常通过电子邮件.QQ传递等方式进行文件的分享,但是由于不同的网络环境有的时候可能会有不同的限制,所以我们就需要寻找其他的方式来替代.今天就为大家推荐两个既常用又与众不同的分享方式. 中国论 ...
- Git 的两种忽略文件方式 gitignore 和 exclude
Git 的两种忽略文件方式 gitignore 和 exclude .gitignore 不用说了,大家都知道. 有一个 exclude 可能接触比较少. 知道这个功能后发现,用在服务器上非常方便,因 ...
- 两种获取connectionString的方式
两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
- python下几种打开文件的方式
昨天看完了这本python进阶,感觉这本书对我启发很大,做了三张纸的笔记,方便我在遇到问题的时候翻阅,然后寻找可能的解决方案.作为一个使用Python一年的小白,虽然说不是小白,但是这一年来基本上是用 ...
- Hibernate中两种获取Session的方式
转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...
- flask框架--设置配置文件的几种方式 与Flask两种配置路由的方式
设置配置文件的几种方式 ==========方式一:============ app.config['SESSION_COOKIE_NAME'] = 'session_lvning' #这种方式要把所 ...
- 如何理解redis两种不同的持久化方式
其实redis就是一种高级的以键值对形式存储数据的数据库,而它的好处就是他可以支持数据的持久化,其实redis之所以会有这样的优点,主要是因为,redis的数据都是存放在内存中的,如果不配置持久化,那 ...
- Spring两种实现AOP的方式
有两种实现AOP的方式:xml配置文件的方式和注解的形式 我们知道通知Advice是指对拦截到的方法做什么事,可以细分为 前置通知:方法执行之前执行的行为. 后置通知:方法执行之后执行的行为. 异常通 ...
随机推荐
- GIT:斯坦福大学提出应对复杂变换的不变性提升方法 | ICLR 2022
论文对长尾数据集中的复杂变换不变性进行了研究,发现不变性在很大程度上取决于类别的图片数量,实际上分类器并不能将从大类中学习到的不变性转移到小类中.为此,论文提出了GIT生成模型,从数据集中学习到类无关 ...
- 初学STM32 CAN通信(三)
1. stm32 CAN通信标准库函数 //CAN通信初始化函数 uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct ...
- idea创建一个干净的SpringMVC项目
一.创建普通的maven项目 二.右键添加web支持 三.pom.xml配置maven环境 1 <!--导入依赖--> 2 <dependencies> 3 <depen ...
- 8 CSS文本属性
8 文本属性 font-style(字体样式风格) /* 属性值: normal:设置字体样式为正体.默认值. italic:设置字体样式为斜体.这是选择字体库中的斜体字. oblique:设置字体样 ...
- RabbitMQ 07 发布订阅模式
发布订阅模式 发布订阅模式结构图: 比如信用卡还款日临近了,那么就会给手机.邮箱发送消息,提示需要去还款了,但是手机短信和邮件发送并不一定是同一个业务提供的,但是现在又希望能够都去执行,就可以用到发布 ...
- 一图读懂HUAWEI HiAI Foundation
作为华为端侧AI的创新开放平台,HMS Core的HUAWEI HiAI Foundation开放AI算力,助力AI应用高效开发,同时联合多领域打造AI生态,实现日调用600亿次的突破,助力AI生态繁 ...
- 使用谷歌浏览器打开PDF文件,怎么关闭缩略图
我们在使用谷歌浏览器浏览PDF文件时,总是会出现章节预览缩略图和工具栏,我们可以使用 参数来控制浏览器不显示出工具栏 #scrollbars=0&toolbar=0&statusbar ...
- 玩转HarmonyOS专项测试,轻松上架“五星”高品质应用
作者:David,华为测试服务专家 随着信息技术的高速发展,移动应用与人们生活日益紧密,面向各类场景的应用层出不穷,什么样的应用更受用户青睐呢?在满足用户功能需求之上,一个好的应用要能运行稳定.流 ...
- 物联网浏览器(IoTBrowser)-Java快速对接施耐德网络IO网关
前一段时间有个Java技术栈的朋友联系到我,需要快速对接现有的无人值守称重系统,这里的对接是指替代现有系统,而非软件层面的对接,也就是利用现有的硬件开发一套替代现有软件的自动化系统.主要设备包括地磅秤 ...
- jenkins 持续集成和交付 —— 邮箱服务器配置(九)
前言 简介邮箱服务器的配置,让jenkins在构建完成后,能有一个邮箱结果通知到我们,这样就不用每次盯着jenkins 看是否完成了. 正文 1.安装插件 安装下面这个插件. Email Extens ...