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 应用程序(模型视图控制器) 

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

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

删除不必要的内容

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

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

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

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

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

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

开始编程

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

第一步  文件上传界面

在 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>

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

 附

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

第二步  文件上传功能

打开 HomeController

头部的引用如下

1

2

3

4

5

6

7

using Microsoft.AspNetCore.Http;

using Microsoft.AspNetCore.Mvc;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Threading.Tasks;

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

在 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 的用法将在后面介绍

贴出一张结构图

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

在 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

即可看到运行界面

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

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

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

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

上传成功

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

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

补充说明

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

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

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

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

  •  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()

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

聚圣源男宝宝起名大全2020属鼠qq三国工匠皮具公司起名婴儿网络起名大全秦始皇一生未娶的原因破解游戏软件排行榜第一名奥运精神电影公社起名赵艺高姓起名字啊麻辣烫店铺起名秋天的雨作文小猫起什么名字好孩子起名网站免费起名字 属鼠玩具公司起名字暧昧鹅考asp免费空间公司起名测算方法普通话考试流程和内容徐州起名馆箱包有限公司起名魔古山宝库农行几点关门晓之护卫3攻略neets剧多多玩锤石起什么名字好刑警之海外行动电视剧在线观看派乐奇童睿字起人名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化