.net core webapi 大文件上传到wwwroot文件夹的操作代码

 更新时间:2023年12月25日 14:40:56   作者:彭小彭~  
这篇文章主要介绍了.net core webapi 大文件上传到wwwroot文件夹的操作代码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

1.配置staticfiles(program文件中)

 app.UseStaticFiles();

2.在wwwroot下创建upload文件夹
3.返回结果封装

namespace webapi;
/// <summary>
/// 统一数据响应格式
/// </summary>
public class Results<T>
{
    /// <summary>
    /// 自定义的响应码,可以和http响应码一致,也可以不一致
    /// </summary>
    public int Code { get; set; }
    /// <summary>
    /// 中文消息提示
    /// </summary>
    public string? Msg { get; set; }
    /// <summary>
    /// 是否成功
    /// </summary>
    public bool Success { get; set; }
    /// <summary>
    /// 响应的数据
    /// </summary>
    public T? Data { get; set; }
    /// <summary>
    /// 返回的Token: 如果有值,则前端需要此这个值替旧的token值
    /// </summary>
    public string? Token { get; set; }
    /// <summary>
    /// 设置数据的结果
    /// </summary>
    /// <param name="data">数据</param>
    /// <returns></returns>
    public static Results<T> DataResult(T data)
    {
        return new Results<T> { Code = 1, Data = data, Msg = "请求成功", Success = true };
    }
    /// <summary>
    /// 响应成功的结果
    /// </summary>
    /// <param name="msg"></param>
    /// <returns></returns>
    public static Results<T> SuccessResult(string msg = "操作成功")
    {
        return new Results<T> { Code = 1, Data = default, Msg = msg, Success = true };
    }
    /// <summary>
    /// 响应失败的结果
    /// </summary>
    /// <param name="msg"></param>
    /// <returns></returns>
    public static Results<T> FailResult(string msg = "请求失败")
    {
        return new Results<T> { Code = -1, Data = default, Msg = msg, Success = false };
    }
    /// <summary>
    /// 参数有误
    /// </summary>
    /// <param name="msg"></param>
    /// <returns></returns>
    public static Results<T> InValidParameter(string msg = "参数有误")
    {
        return new Results<T> { Code = -1, Data = default, Msg = msg, Success = false };
    }
    /// <summary>
    /// 获取结果
    /// </summary>
    /// <param name="code"></param>
    /// <param name="msg"></param>
    /// <param name="data"></param>
    /// <param name="success"></param>
    /// <returns></returns>
    public static Results<T> GetResult(int code = 0, string? msg = null, T? data = default, bool success = true)
    {
        return new Results<T> { Code = code, Data = data, Msg = msg, Success = success };
    }
    /// <summary>
    /// 设置token结果
    /// </summary>
    /// <param name="token"></param>
    /// <returns></returns>
    public static Results<T> TokenResult(string token)
    {
        return new Results<T> { Code = 1, Data = default, Msg = "请求成功", Success = true, Token = token };
    }
}

4.创建一个新的控制器

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Net.Http.Headers;
namespace webapi.Controllers;
/// <summary>
/// 文件上传
/// </summary>
[ApiController]
[Route("[controller]/[action]")]
public class UploadController : ControllerBase
{
    private readonly IWebHostEnvironment _hostEnvironment;
    /// <summary>
    /// 注入服务
    /// </summary>
    /// <param name="hostEnvironment"></param>
    public UploadController(IWebHostEnvironment hostEnvironment)
    {
        _hostEnvironment = hostEnvironment;
    }
    /// <summary>
    /// 上传文件(支持多文件/大文件500M)
    /// </summary>
    /// <returns></returns>
    [HttpPost]
    [RequestFormLimits(MultipartBodyLengthLimit = 609715200)]
    [RequestSizeLimit(609715200)]
    public async Task<Results<List<string>>> UploadFile()
    {
        var request = HttpContext.Request;
        if (!request.HasFormContentType ||
            !MediaTypeHeaderValue.TryParse(request.ContentType, out var mediaTypeHeader) ||
            string.IsNullOrEmpty(mediaTypeHeader.Boundary.Value))
        {
            return Results<List<string>>.FailResult("文件类型不支持");
        }
        var reader = new MultipartReader(mediaTypeHeader.Boundary.Value, request.Body);
        var section = await reader.ReadNextSectionAsync();
        List<string> serverFilePathList = new();
        while (section != null)
        {
            var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition,
                out var contentDisposition);
            if (hasContentDispositionHeader && contentDisposition!.DispositionType.Equals("form-data") &&
                !string.IsNullOrEmpty(contentDisposition.FileName.Value))
            {
                // 获取文件后缀名
                var extension = Path.GetExtension(contentDisposition.FileName.Value);
                // 为文件重命名,防止文件重名
                var fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + extension;
                // 文件保存的文件夹路径
                var uploadPath = Path.Combine(_hostEnvironment.WebRootPath, "upload");
                if (!Directory.Exists(uploadPath))
                {
                    Directory.CreateDirectory(uploadPath);
                }
                var fileFullPath = Path.Combine(uploadPath, fileName);
                try
                {
                    using var targetStream = System.IO.File.Create(fileFullPath);
                    await section.Body.CopyToAsync(targetStream);
                    serverFilePathList.Add("/upload/" + fileName);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
            section = await reader.ReadNextSectionAsync();
        }
        return Results<List<string>>.DataResult(serverFilePathList);
    }
}

5.使用postman工具测试

在这里插入图片描述

6.查看本地上传文件

在这里插入图片描述

到此这篇关于.net core webapi 大文件上传到wwwroot文件夹的文章就介绍到这了,更多相关.net core webapi 大文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 接口的隐式与显示实现及适应场景

    C# 接口的隐式与显示实现及适应场景

    以前在用到接口时,从来没注意到接口分为隐式实现与显示实现。昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习,需要的朋友可以了解下
    2012-12-12
  •  ASP.NET Core 模型验证过滤器的两种实现方法

     ASP.NET Core 模型验证过滤器的两种实现方法

     在.Net Core的时代中,框架会帮你自动验证,本文主要介绍了 ASP.NET Core 模型验证过滤器的两种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • asp.net 处理F5刷新页面重复提交页面的一个思路

    asp.net 处理F5刷新页面重复提交页面的一个思路

    当提交完一个页面后,如果我们再次点击F5刷新该页面的话,会弹出一个提示,提示我们如果继续,则会重新发送提交我们刚才提交的内容,要是类似付款或一次性的操作,我们不应该这样操作,否则会造成重复提交的问题。
    2010-02-02
  • .NET Core 实现定时抓取网站文章并发送到邮箱

    .NET Core 实现定时抓取网站文章并发送到邮箱

    本片文章通过实例讲述.NET Core 实现定时抓取博客园首页文章信息并发送到邮箱这个功能,对此有兴趣的朋友参考学习下。
    2018-02-02
  • .NET微服务架构CI/CD镜像自动分发

    .NET微服务架构CI/CD镜像自动分发

    这篇文章介绍了.NET微服务架构CI/CD实现镜像自动分发的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • ASP.NET开发中经常用到10款工具软件介绍

    ASP.NET开发中经常用到10款工具软件介绍

    从事.NET开发也好几年了,工作过程中积累一些软件工具,分享给大家,排名不分先后,希望对大家有所帮助。
    2016-04-04
  • ASP.NET实现个人信息注册页面并跳转显示

    ASP.NET实现个人信息注册页面并跳转显示

    这篇文章主要介绍了ASP.NET实现个人信息注册页面并跳转显示的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • .net中webconfig 详解

    .net中webconfig 详解

    这篇文章主要介绍了.net中webconfig 详解,需要的朋友可以参考下
    2015-01-01
  • ASP.NET 根据汉字获取汉字拼音的首字母(含多音字)

    ASP.NET 根据汉字获取汉字拼音的首字母(含多音字)

    本文分享了一个函数,这个函数可以根据汉字的字符串获取其拼音的首字母,以便我们在实际开发中使用。
    2016-04-04
  • linq中的分组操作符

    linq中的分组操作符

    这篇文章介绍了linq中的分组操作符,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03

最新评论