当前位置: 代码网 > it编程>编程语言>Asp.net > .net core webapi 大文件上传到wwwroot文件夹的操作代码

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

2024年06月02日 Asp.net 我要评论
1.配置staticfiles(program文件中) app.usestaticfiles();2.在wwwroot下创建upload文件夹3.返回结果封装namespace webapi;///

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 大文件上传内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com