zoukankan      html  css  js  c++  java
  • 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 应用程序(模型视图控制器) 

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


     

    删除不必要的内容

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

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

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


    开始编程

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

    第一步  文件上传界面

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

     附


     

    第二步  文件上传功能

    打开 HomeController

    头部的引用如下

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Threading.Tasks;
    

      

    在 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 += "
    文件已存在:" + thispath.ToString();
                            continue;
                        }
    
                        //上传文件
                        using (var stream = new FileStream(thispath, FileMode.Create))      //创建特定名称的文件流
                        {
                            try
                            {
                                await item.CopyToAsync(stream);     //上传文件
                            }
                            catch (Exception ex)        //上传异常处理
                            {
                                ViewBag.log += "
    " + ex.ToString();
                            }
                        }
                    }
                }
                return View();
            }

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

    贴出一张结构图

    在 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

    即可看到运行界面

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

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


    上传成功

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


    补充说明

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

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

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

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

  • 相关阅读:
    HDU4628+状态压缩DP
    Javascript 去掉字符串前后空格的五种方法
    Javascript 数组之判断取值和数组取值
    ASP.NET MVC 出现错误 “The view 'XXX' or its master was not found or no view engine support”
    ASP.NET MVC 页面调整并传递参数
    ASP.NET MV3 部署网站 报"Could not load file or assembly ' System.Web.Helpers “ 错的解决方法
    ASP.NET MVC 控制器向View传值的三种方法
    CSharp 如何通过拼接XML调用存储过程来查询数据
    SQLServer : EXEC和sp_executesql的区别
    关于SQLServer2005的学习笔记—异常捕获及处理
  • 原文地址:https://www.cnblogs.com/whuanle/p/10008976.html
Copyright © 2011-2022 走看看