欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > ASP.NET Core单个文件和多个文件上传并保存到服务器

ASP.NET Core单个文件和多个文件上传并保存到服务器

日期:2023-10-01 12:20

前言:

  在我们日常开发中,将图片、视频、音频、文档等相关文件上传并保存到服务器是很常见的功能。今天主要记录一下我们开发中常用的两种方法,方便大家使用。直接使用希望可以帮助到有需要的同学!

1。在 www.introzo.com Core 中配置静态文件:

简要概述:

   在www.introzo.com Core应用中,静态资源文件需要进行相应的配置才能提供给客户端直接使用。

详细说明请参考官方文档:

https://www.introzo.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1

配置简单,提供Web根目录下的文件:

在Startup.Configure中调用UseStaticFiles方法进行配置:

public void 配置(IApplicationBuilder 应用程序)
{
    app.UseStaticFiles();
}

2。文件服务器和应用程序配置(IIS、Kestrel):

详细说明请参考官方文档:

https://www.introzo.com/zh-cn/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1#server-and-app-configuration

多部分文本长度限制:

MultipartBodyLengthLimit 设置每个多部分主体的长度限制。 当解析超出此限制的表单部分时,将引发 InvalidDataException。 默认值为 134,217,728 (128 MB)。 使用 MultipartBodyLengthLimit 中的 Startup.ConfigureServices 设置来自定义此限制:

公共无效ConfigureServices(IServiceCollection服务)
{
    services.Configure(选项=>
    {
        // 将限制设置为 256 MB
        选项.MultipartBodyLengthLimit = 268435456;
    });
}

Kestrel 最大请求车身尺寸:

对于 Kestrel 托管的应用程序,默认最大请求正文大小为 30,000,000 字节,大约为 28.6 MB。 使用 MaxRequestBodySize Kestrel 服务器选项自定义限制:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureKestrel((上下文,选项) =>
        {
            // 处理最大 50 MB 的请求
            选项.Limits.MaxRequestBodySize = 52428800;
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup();});

IIS 内容长度限制:

默认请求限制 (maxAllowedContentLength) 为 30,000,000 字节,大约 28.6 MB。 请在 web.config 文件中自定义此限制:


  
    
      
      
    
  

3。单文件上传:

使用系统;
使用www.introzo.com;
使用 Microsoft.AspNetCore.Hosting;
使用 Microsoft.AspNetCore.Http;
使用Microsoft.AspNetCore.Mvc;

命名空间 FileUploadManage.Controllers
{
    ///
    /// 图片、视频、音频、文档等相关文件的通用上传服务
    ///
    public  FileUploadController:控制器
    {
        私有 静态 IHostingEnvironment _hostingEnvironment;

        publicFileUploadController(IHostingEnvironment托管环境)
        {
            _hostingEnvironment = 托管环境;
        }

        //////单个文件上传(ajax和Form表单均适用)
        ///
        ///
        publicJsonResult SingleFileUpload()
        {
            var formFile = Request.Form.Files[0];//获取请求发送的文件
            var currentDate = www.introzo.com;
            var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于 HttpContext.Current.Server.MapPath("") 

            尝试
            {
                var 文件路径 = $"/UploadFile/{currentDate:yyyyMMdd}/";

                // 创建日常存储文件夹
                if (!Directory.Exists(webRootPath + 文件路径))
                {
                    Directory.CreateDirectory(webRootPath + filePath);
                }

                if(formFile!=null)
                {
                    //文件后缀var fileExtension = Path.GetExtension(formFile.FileName);// 获取文件格式和扩展名

                    //判断文件大小
                    var fileSize = formFile.Length;

                    ? 024b)
 {
                        返回 new JsonResult(new { isSuccess =  false , resultMsg = "上传的文件不能大于10M"});
                    }

                    //保存的文件名(以名称和保存时间命名)
                    var saveName = formFile.FileName.Substring(0, formFile.FileName.LastIndexOf('.'  )) + " _" + currentDate.ToString("HHmmss") + fileEx紧张;

                    //文件保存使用 (var fs = System.IO.File.Create(webRootPath + filePath + saveName))
                    {
                        formFile.CopyTo(fs);
                        fs.Flush();
                    }

                    //完整文件路径
                    varcompleteFilePath =Path.Combine(filePath, saveName);

                    返回 new JsonResult(new { isSuccess =  true ,返回消息 = "上传成功",completeFilePath =completeFilePath });
                }
                其他
                {
                    返回 new JsonResult(new { isSuccess =  false , resultMsg = "上传失败,上传未检测到文件信息~"});
                }

            }
            catch(例外情况)
            {返回 new JsonResult(new { isSuccess =  false , resultMsg = "保存文件失败,异常消息为:" + ex.Message });
            }
        }

        ///
        /// 表单单个文件上传
        ///
        /// 表单文件流程信息
        ///
        publicJsonResult FormSingleFileUpload(IFormFile formFile)
        {
            var currentDate = www.introzo.com;
            var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于 HttpContext.Current.Server.MapPath("") 

            尝试
            {
                var 文件路径 = $"/UploadFile/{currentDate:yyyyMMdd}/";

                // 创建日常存储文件夹
                if (!Directory.Exists(webRootPath + 文件路径))
                {Directory.CreateDirectory(webRootPath + filePath);
                }

                if(formFile!=null)
                {
                    //文件后缀
                    var fileExtension = Path.GetExtension(formFile.FileName);// 获取文件格式和扩展名

                    //判断文件大小
                    var fileSize = formFile.Length;

                    ? 024b)
 {
                        返回 new JsonResult(new { isSuccess =  false , resultMsg = "上传的文件不能大于10M"});
                    }

                    //保存的文件名(以名称和保存时间命名)var saveName = formFile.FileName.Substring(0, formFile.FileName.LastIndexOf('.'  )) + " _" + currentDate.ToString("HHmmss") + fileEx紧张;

                    //文件保存
                    使用 (var fs = System.IO.File.Create(webRootPath + filePath + saveName))
                    {
                        formFile.CopyTo(fs);
                        fs.Flush();
                    }

                    //完整文件路径
                    varcompleteFilePath =Path.Combine(filePath, saveName);

                    返回 new JsonResult(new { isSuccess =  true ,返回消息 = "上传成功",completeFilePath =completeFilePath });
                }
                其他
                {返回 new JsonResult(new { isSuccess =  false , resultMsg = "上传失败,上传未检测到文件信息~"});
                }

            }
            catch(例外情况)
            {
                返回 new JsonResult(new { isSuccess =  false , resultMsg = "保存文件失败,异常消息为:" + ex.Message });
            }

        }
    }
} 

4。多个文件上传:

使用系统;
使用System.Collections.Generic;
使用www.introzo.com;
使用 Microsoft.AspNetCore.Hosting;
使用 Microsoft.AspNetCore.Http;
使用 Microsoft.AspNetCore.Http.Internal;
使用Microsoft.AspNetCore.Mvc;
使用 Microsoft.EntityFrameworkCore.Internal;

命名空间 FileUploadManage.Controllers
{
    ///
    /// 图片、视频、音频、文档等相关文件的通用上传服务
    ///public  FileUploadController:控制器
    {
        私有 静态 IHostingEnvironment _hostingEnvironment;

        publicFileUploadController(IHostingEnvironment托管环境)
        {
            _hostingEnvironment = 托管环境;
        }

        ///
        /// 多个文件上传
        ///
        /// 形成收藏价值
        /// 服务器存储的文件信息

        publicJsonResult MultiFileUpload(IFormCollection formCollection)
        {
            var currentDate = www.introzo.com;
            var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于 HttpContext.Current.Server.MapPath("") 
            var uploadFileRequestList = 列表();
            尝试
            {
                //F​​ormCollection 转换为 FormFileCollectionvar 文件= (FormFileCollection)formCollection.Files;

                if(文件.Any())
                {
                    foreachvar文件in文件)
                    {
                        var uploadFileRequest = new UploadFileRequest();

                        var 文件路径 = $"/UploadFile/{currentDate:yyyyMMdd}/";

                        // 创建日常存储文件夹
                        if (!Directory.Exists(webRootPath + 文件路径))
                        {
                            Directory.CreateDirectory(webRootPath + filePath);
                        }

                        //文件后缀
                        var fileExtension = Path.GetExtension(file.FileName);// 获取文件格式和扩展名

                        //判断文件大小var fileSize = file.Length;

                        ? 024b)
 {
                            继续;
                        }

                        //保存的文件名(以名称和保存时间命名)
                        var saveName = file.FileName.Substring(0, file.FileName.LastIndexOf('.'  )) + " _" + currentDate.ToString("HHmmss") + fileEx紧张;

                        //文件保存
                        使用 (var fs = System.IO.File.Create(webRootPath + filePath + saveName))
                        {
                            文件.CopyTo(fs);
                            fs.Flush();
                        }

                        //完整文件路径varcompleteFilePath =Path.Combine(filePath, saveName);

                        uploadFileRequestList.Add(new UploadFileRequest()
                        {
                            文件名 = 保存名称,
                            文件路径 = 完整文件路径
                        });
                    }
                }
                其他
                {
                    返回 new JsonResult(new { isSuccess =  false , resultMsg = "上传失败,上传未检测到文件信息~"});
                }
            }
            catch(例外情况)
            {
                返回 new JsonResult(new { isSuccess =  false , resultMsg = "保存文件失败,异常消息为:" + ex.Message });
            }

            if (uploadFileRequestList.Any())
            {返回 new JsonResult(new { isSuccess =  true ,返回消息 = "上传成功", filePathArray = uploadFileRequestList });
            }
            其他
            {
                返回 new JsonResult(new { isSuccess =  false , resultMsg = "网络打瞌睡,文件保存失败" });
            }
        }

    }

    ///
    /// 文件上传响应模型
    ///
    公共 UploadFileRequest
    {
        ///
        /// 文件名
        ///
        public string 文件名 { get; 套装; }

        ///
        /// 文件路径
        ///
        public string 文件路径 { get; 套装; }
    }
}

关灯