.NET Framework4.7.2 制作 Web API 图片上传接收功能

本文将简单介绍如何制作 Web API 接收前端上传图片,并调整图片档名及尺寸,用於用户大头贴图片。

.NET Framework 4.7.2

开发环境

  • Visual Studio 2019
  • AspNet.Mvc version=”5.2.7”
  • AspNet.WebApi version=”5.2.7”
  • EntityFramework version="6.1.3”

Web API 接收上传图片

参考资料

NuGet 安装套件

  • SixLabors.ImageSharp version="2.0.0”

程序码实作

[HttpPost]
public async Task<IHttpActionResult> UploadProfile()
{
    // 检查请求是否包含 multipart/form-data.
    if (!Request.Content.IsMimeMultipartContent()) {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    // 检查资料夹是否存在,若无则建立
    string root = HttpContext.Current.Server.MapPath("~/upload/profile");
    if (!Directory.Exists(root)) {
        Directory.CreateDirectory("~/upload/profile");
    }

    try {
        // 读取 MIME 资料
        var provider = new MultipartMemoryStreamProvider();
        await Request.Content.ReadAsMultipartAsync(provider);

        // 取得档案副档名,单档用.FirstOrDefault()直接取出,多档需用回圈
        string fileNameData = provider.Contents.FirstOrDefault().Headers.ContentDisposition.FileName.Trim('\"');
        string fileType = fileNameData.Remove(0, fileNameData.LastIndexOf('.')); // .jpg

        // 定义档案名称
        string fileName = "UserName" + "Profile" + DateTime.Now.ToString("yyyyMMddHHmmss") + fileType;

        // 储存图片,单档用.FirstOrDefault()直接取出,多档需用回圈
        var fileBytes = await provider.Contents.FirstOrDefault().ReadAsByteArrayAsync();
        var outputPath = Path.Combine(root, fileName);
        using (var output = new FileStream(outputPath, FileMode.Create, FileAccess.Write)) {
            await output.WriteAsync(fileBytes, 0, fileBytes.Length);
        }

        // 使用 SixLabors.ImageSharp 调整图片尺寸 (正方形大头贴)
        var image = SixLabors.ImageSharp.Image.Load<Rgba32>(outputPath);
        image.Mutate(x => x.Resize(120, 120)); // 输入(120, 0)会保持比例出现黑边
        image.Save(outputPath);

        return Ok(new
        {
            Status = true,
            Data = new
            {
                FileName = fileName
            }
        });
    }
    catch (Exception e) {
        return BadRequest(e.Message); // 400
    }
}

<<:  6. STM32-NVIC USART

>>:  Python & Celery 学习笔记_任务排程

@Day5 | C# WixToolset + WPF 帅到不行的安装包 [变更UI预设介面]

官方网站的文件 https://wixtoolset.org//documentation/man...

Android学习笔记15

上次试了一般转圈圈的progressbar,这次换进度条的progressbarr 首先是xml &...

相机拍图编码

如果要图像不失细节(jpeg是有损压缩) 最好是PNG格式(无损压缩) 这边介绍YUV import...

Day 25 Redis (上)

看到这个标题,你或许会有一点疑惑,为什麽他不是以 Flask 开头?因为它是一个资料库的名称,而 F...

【8】资料集有没有事先 shuffle 对训练所产生的影响

Colab连结 昨天我们介绍了 Shuffle 这支 API 的使用方式,其中特别提到了如果今天资料...