首页 > 编程语言 >aspnetcore两种上传图片(文件)的方式

aspnetcore两种上传图片(文件)的方式

时间:2022-11-16 19:14:29浏览次数:60  
标签:string stream aspnetcore token var using 上传 image 图片

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就行了, 这里不做介绍,可以看看微软的官方文档。 

标签:string,stream,aspnetcore,token,var,using,上传,image,图片
From: https://www.cnblogs.com/morec/p/16897168.html

相关文章

  • 5 步!用阿里云 Serverless 搭建高质量的图片压缩工具
    作者:ReganYue本文选自“Serverless函数计算征集令”活动什么是ServerlessServerless是一种基于云计算的开发方法,它让开发人员可以专注于编写代码来解决业务问题,而不是处......
  • 实验二:解析4k图片下载
    importrequestsfromlxmlimporthtmlurl='https://pic.netbian.com/4kyingshi/'#UA伪装:让爬虫对应的请求载体标识伪装成一款浏览器,将对应的User-Agent封装到字......
  • 下错jdk压缩包用rz上传到Linux乱码
    哭泣32位的JDK上传到64位的Centos,一开始上传就是乱码,然后网上说是因为上传压缩包要加参数rz-be,其实下对包就不用下载的是jdki586,三年了我还不知道这个32为的包rm:r......
  • 痞子衡博客园主页文章图片无法显示的解决方法
    大家好,我是痞子衡,是正经搞技术的痞子。众所周知,痞子衡主要是在博客园个人主页精心维护文章发布、修改更新以及最重要的目录索引。博客园个人主页:https://www.cnblogs.......
  • PS新手教程-如何使用PS制作由无数图片组成的千图人像效果
    如何使用PS制作由无数图片组成的千图人像效果?给大家介绍如何使用PS制作由无数图片组成的千图人像效果,一起来看看吧。安装PS20231.准备好图片,如果图片尺寸不统一,可以用PS......
  • java切图片圆角
    importxyz.laremehpe.FileUtil.FileChooser;importjavax.imageio.ImageIO;importjava.awt.*;importjava.awt.geom.Ellipse2D;importjava.awt.image.BufferedIma......
  • 【tensorflow2.6】图片数据建模流程:猫狗分类,83.6%识别率
    目标:识别猫和狗一、猫狗数据集数据集下载:公众号,回复:猫狗数据集训练数据集(每一张图片都有dog和cat标签):测试集(图片没有标签):二、训练环境kaggletenslrflow2.6三、数据处理impo......
  • GIT-LFS(解决大于100M的文件无法上传的问题)
    1.什么是GIT-LFSGitLFS(LargeFileStorage)是一个开源的Git大文件版本控制的解决方案和工具集,工具自身是基于Golang进行实现,并在Github上开源。原理上是通过对Git客户......
  • uni-app img header 请求图片
    由于uni-app没有Blob对象。只能用内置的uni.download下载图片了。wx.downloadFile({url:`http://192.168.1.1:8999/view/1MsDmdpGRI27FaRDKNmgQ/wx`,he......
  • Java SpringBoot FTP 上传下载文件
    POM添加依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.7</version></dependency><!--......