ASP.NET Core上传多文件 超简单教程

简介: ASP.NET Core上传多文件 超简单教程

示例源码下载地址

https://qcloud.coding.net/api/project/3915794/files/4463836/download

项目地址 https://dev.tencent.com/u/whuanle/p/asp.netcore_file_upload/attachment


创建应用程序


打开VS 2017

  --新建 ASP.NET Core Web 应用程序

    --Web 应用程序(模型视图控制器)

程序名字、路径,默认即可


微信图片_20220426115129.png


删除不必要的内容


  • 打开 HomeController.cs 文件,删除所有方法


微信图片_20220426115137.png

 

  • 打开 Views/Home目录,删除所有文件

 

微信图片_20220426115143.png

 

  • 在应用程序中 新建 file 目录

 

微信图片_20220426115146.png


 

开始编程


那么,现在来写程序,实现文件上传


第一步  文件上传界面


在 HomeController 中新建一个方法

这个 Action 是上传文件的界面


public IActionResult Upload()
        {
            return View();
        }


然后在 Views/Home 目录中添加一个视图 Upload.cshtml

把以下代码复制到 Upload.cshtml 中

这部分就是一个文件上传表单,没有什么特殊的,这里不解释代码作用。


@{
    ViewData["Title"] = "Upload";
}
<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadFiles">
    <div class="form-group">
        <div class="col-md-12">
            <p>选择要上传的文件</p>
            <input type="file" name="files" multiple />
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-12">
            <input type="submit" value="上传" />
        </div>
    </div>
</form>


微信图片_20220426115153.png


微信图片_20220426115159.png

 


 

第二步  文件上传功能


打开 HomeController

头部的引用如下


1

2

3

4

5

6

7

usingMicrosoft.AspNetCore.Http;

usingMicrosoft.AspNetCore.Mvc;

usingSystem;

usingSystem.Collections.Generic;

usingSystem.IO;

usingSystem.Linq;

usingSystem.Threading.Tasks;


  微信图片_20220426115204.png

 

在 HomeController 类里面添加一个方法


[HttpPost]    //上传文件是 post 方式,这里加不加都可以
        public async Task<IActionResult> UploadFiles(List<IFormFile> files)
        {
            long size = files.Sum(f => f.Length);       //统计所有文件的大小
            var filepath = Directory.GetCurrentDirectory() + "\\file";  //存储文件的路径
            ViewBag.log = "日志内容为:";     //记录日志内容
            foreach (var item in files)     //上传选定的文件列表
            {
                if (item.Length > 0)        //文件大小 0 才上传
                {
                    var thispath = filepath + "\\" + item.FileName;     //当前上传文件应存放的位置
                    if (System.IO.File.Exists(thispath) == true)        //如果文件已经存在,跳过此文件的上传
                    {
                        ViewBag.log += "\r\n文件已存在:" + thispath.ToString();
                        continue;
                    }
                    //上传文件
                    using (var stream = new FileStream(thispath, FileMode.Create))      //创建特定名称的文件流
                    {
                        try
                        {
                            await item.CopyToAsync(stream);     //上传文件
                        }
                        catch (Exception ex)        //上传异常处理
                        {
                            ViewBag.log += "\r\n" + ex.ToString();
                        }
                    }
                }
            }
            return View();
        }


注:IFormFile 的用法将在后面介绍


贴出一张结构图


微信图片_20220426115210.png


在 Views/Home 目录中,新建一个视图 UploadFiles.cshtml

打开 UploadFiles.cshtml

把以下代码放进去

下面代码是输出 file目录下的文件,并输出 日志记录


@using System.IO
@{
    ViewData["Title"] = "UploadFiles";
}
<h2>目录内容</h2>
<ul class="list-group">  //razor语法  输出file目录的文件
    @{
        var items = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\file");
        foreach (var item in items)
        {
            <li class="list-group-item">@item.ToString()</li>
        }
    }
</ul>
<hr />
<h2>日志内容</h2>
<p>
    @ViewBag.log
</p>

运行


按 F5 运行应用

打开

https://localhost:你的端口/Home/Upload

即可看到运行界面


微信图片_20220426115216.png


 

请选择体积较小的文档文件如txt、doc、pdf,图片等进行测试,上传的文件不要太多

不用选择太多、体积大文件、dll文件、可运行文件等等,不然有可能报错。


微信图片_20220426115221.png


上传成功


上传成功将会跳转到   https://localhost:你的端口/Home/UploadFiles


微信图片_20220426115227.png



补充说明


  • 上传重复文件后,界面会提示


微信图片_20220426115227.png


 

  • 上传太大或太多文件,会报错


微信图片_20220426115231.png


  • IFormFile 的用法


所属命名空间为 Microsoft.AspNetCore.Http


属性



ContentDisposition

获取上载文件的原始Content-Disposition标头。

ContentType

获取上载文件的原始Content-Type标头。

FileName

从Content-Disposition标头中获取文件名。


Headers

获取上传文件的标题字典。

Length

获取文件长度,以字节为单位。

Name

从Content-Disposition标头中获取表单字段名称。


方法



CopyTo(Stream)

将上载文件的内容复制到target流中。

CopyToAsync(Stream, CancellationToken)

异步将上载文件的内容复制到target流中。

OpenReadStream()

打开请求流以读取上载的文件。



相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
296 6
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
320 5
|
12月前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
364 18
|
12月前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
418 12
|
12月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
295 1
|
12月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
375 5
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
453 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
241 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
279 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
213 0