搭建.NET Core Web API 文件上传项目

前言

本文介绍从零搭建.NET Core Web API 文件上传项目,文中代码以上传文件为例。
源码下载地址:下载地址


步骤

1 创建新的.NET Core Web API 项目,如下图。
在这里插入图片描述

2 给项目命名
在这里插入图片描述
3 框架使用的是.NET 8.0(长期支持)
在这里插入图片描述
4 项目创建好后得到如下目录结构
在这里插入图片描述
5 运行项目出现SwaggerAPI文档页面
在这里插入图片描述
6 创建一个新的类库项目,放我们的一些帮助类。
在这里插入图片描述
7 创建类库

在这里插入图片描述
8 给新建的类库命名
在这里插入图片描述
9 选择和之前框架一样的框架版本
在这里插入图片描述
10 编写保存缩略图的帮助类代码,代码如下

using System;
using System.Collections.Generic;
using ImageMagick;

namespace TS.Common.Helpers
{
    public class ImageHelper
    {
        /// <summary>
        /// 保存缩略图
        /// </summary>
        /// <param name="originalFilePath">原图地址</param>
        /// <param name="destinationFilePath">模板地址</param>
        /// <param name="targetWidth">目标大小</param>
        public static bool ResizeAndSaveImage(string originalFilePath, string destinationFilePath, int targetWidth)
        {
            bool flag = false;
            using (MagickImage image = new MagickImage(originalFilePath))
            {
                if (image.Width > targetWidth)
                {
                    int targetHeight = (int)(((double)targetWidth / image.Width) * image.Height);

                    image.Resize(targetWidth, targetHeight);
                    image.Write(destinationFilePath);
                    flag = true;
                }
                else
                {
                    image.Resize(image.Width, image.Height);
                    image.Write(destinationFilePath);
                    flag = true;
                }
            }
            return flag;
        }
    }
}

11 当然这个代码需要用到Magick,我们使用NuGet安装
在这里插入图片描述
12 安装如下图版本包
在这里插入图片描述
13 在API项目中添加控制器文件, 命名为FileController.cs
在这里插入图片描述
14 编写上传文件的代码

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace FileUploadAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class FileController : ControllerBase
    {
        private readonly string fileAddr = "C:/Web/WebSevice/template/";


        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        [HttpPost("UploadifyFile")]
        public async Task<IActionResult> UploadifyFile([FromForm] IFormFile file)
        {
            // 获取文件后缀名
            string fileExtension = Path.GetExtension(file.FileName).ToLower();
            string[] allowedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp" };

            string fileName = Path.GetFileNameWithoutExtension(file.FileName);

            string originalFileName = Path.Combine(fileAddr, fileName + fileExtension);

            // 判断是否是图片文件
            if (!allowedExtensions.Contains(fileExtension))
            {
                if (!System.IO.File.Exists(originalFileName))
                {
                    await SaveFileAsync(file, originalFileName);
                }
            }
            else
            {
                // 图片文件 保存缩略图
                originalFileName = Path.Combine(fileAddr, fileName + "_o" + fileExtension);
                string smallFileName = Path.Combine(fileAddr, fileName + "_s" + fileExtension);
                string mediumFileName = Path.Combine(fileAddr, fileName + "_m" + fileExtension);

                if (!System.IO.File.Exists(originalFileName))
                {
                    await SaveFileAsync(file, originalFileName);
                    TS.Common.Helpers.ImageHelper.ResizeAndSaveImage(originalFileName, smallFileName, 200); // 调整宽度为200
                    TS.Common.Helpers.ImageHelper.ResizeAndSaveImage(originalFileName, mediumFileName, 500); // 调整宽度为500
                }
            }

            return Ok(fileName);
        }

        /// <summary>
        /// 保存原始文件
        /// </summary>
        /// <param name="file"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private async Task SaveFileAsync(IFormFile file, string filePath)
        {
            string? directory = Path.GetDirectoryName(filePath);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }
        }
    }
}

15 使用调试工具 上传个文件试试
在这里插入图片描述
16 上传图片能保存缩略图,上传非图片直接保存
在这里插入图片描述


总结

这里只介绍了一个简单文件上传项目代码,一个完整的webapi项目还需要配置其他功能,例如Jwt验证,如何与数据库交互。


最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 08:38:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 08:38:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 08:38:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 08:38:01       55 阅读

热门阅读

  1. SQL-正则表达式

    2024-07-21 08:38:01       16 阅读
  2. 03Spring底层架构核心概念解析

    2024-07-21 08:38:01       13 阅读
  3. Reminder related with work

    2024-07-21 08:38:01       18 阅读
  4. 【ffmpeg命令】RTMP推流

    2024-07-21 08:38:01       16 阅读
  5. 统信UOS

    统信UOS

    2024-07-21 08:38:01      17 阅读
  6. 河南萌新联赛2024第(一)场:河南农业大学

    2024-07-21 08:38:01       19 阅读
  7. 解决echarts在uniapp里tooltip,legend不能点击的问题

    2024-07-21 08:38:01       15 阅读
  8. web学习笔记(八十一)

    2024-07-21 08:38:01       16 阅读