ASP.NET Core实现多文件上传

创建应用程序

打开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 += "\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 的用法将在后面介绍

贴出一张结构图

在 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()
打开请求流以读取上载的文件。

示例源码下载地址

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

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

到此这篇关于ASP.NET Core实现多文件上传的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Net5 WorkService 继承 Quarzt 及 Net5处理文件上传功能

    Net5 版本以Core为底层非framework框架的windowservice 服务. 在VS里叫WorkService 可以以CMD方式运行也可以以Windowservice方式运行,部署简单. Program.cs如下,是关键配置和启动项 using Microsoft.Extensions.Hosting; using Quartz; using WorkerService.Common; using WorkerService.Job; namespace WorkerService

  • quarzt定时调度任务解析

    简介 Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用,这里我们介绍和spring整合的例子 因为Spring已经整合Quarzt,所以我们只需要配置一下即可. 下载jar包 可以直接去http://www.quartz-scheduler.org/ Quarzt的官方网站下载jar包 可以通过Maven来构建,记得引入Spring所需要的jar

  • asp.net大文件上传解决方案实例代码

    以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

  • ASP.NET Core文件上传与下载实例(多种上传方式)

    前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经很成熟了.下个项目争取使用吧. 正文 1.使用模型绑定上传文件(官方例子) 官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads 这里吐槽一下 - -,这TM的机器翻译..还不如自己看E文的..

  • ASP.NET Core实现多文件上传

    创建应用程序 打开VS 2017 --新建 ASP.NET Core Web 应用程序 --Web 应用程序(模型视图控制器) 程序名字.路径,默认即可 删除不必要的内容 打开HomeController.cs 文件,删除所有方法 打开Views/Home目录,删除所有文件 在应用程序中 新建 file 目录 开始编程 那么,现在来写程序,实现文件上传 第一步 文件上传界面 在HomeController 中新建一个方法 这个 Action 是上传文件的界面 public IActionResu

  • asp.net core mvc实现文件上传实例

    工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvironment hostingEnv; public PictureController(IHostingEnvironment env) { this.hostingEnv = env; } // GET: /<controller>/ public IActionResult Index()

  • asp.net批量多选文件上传解决方案

    多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的.很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能. 主要实现的功能如下: 一.选择多个文件上传并显示单个文件的上传进度 二.显示所有文件总的上传进度 三.显示所有上传文件的总大小 四.上传前

  • ASP.NET MVC实现批量文件上传

    根据项目需要,研究了一下如何在ASP.NETMVC下实现批量文件上传.首先,介绍单文件上传:然后,介绍多文件上传如何实现. 一.单文件上传 单文件上传的原理是将文件数据放入request中,由页面直接传递至后台controller中,类似于view和controller之间传参数,直接贴上代码加注释. Upload.aspx文件中的代码: <form enctype="multipart/form-data" method="post"> <inp

  • asp.net中Fine Uploader文件上传组件使用介绍

    最近在处理后台数据时需要实现文件上传.考虑到对浏览器适配上采用Fine Uploader. Fine Uploader 采用ajax方式实现对文件上传.同时在浏览器中直接支持文件拖拽[对浏览器版本有要求类似IE版本必须是9或是更高的IE10].在不同浏览器中提供统一用户体验.该组件基本覆盖目前所有主流浏览器.同时没有任何第三方组件依赖.相当Clear.在服务器端已经覆盖支持了ASP.NET/ColdFusion/Java/Node.js/Perl/PHP/Python. 对上传细节类似限制文件大

  • .Net Core实现图片文件上传下载功能

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. 一.开发环境 毋庸置疑,宇宙第一IDE VisualStudio 2017 二.项目结构 FilesController 文件上传下载控制器 PictureController 图片上传下载控制器 Return_Helper_DG 返回值帮助类 三.关键代码 1.首先我们来看Startup.cs

  • 在ASP.NET中实现多文件上传的方法

    在以前的Web应用中,上传文件是个很麻烦的事,现在有了.NET,文件上传变得轻而易举.下面的这个例子实现了多文件上传功能.可以动态添加输入表单,上传的文件数量没有限制.代码如下: MultiUpload.aspx <%@ Page Language="vb" AutoEventWireup="false" Codebehind="MultiUpload.aspx.vb"  Inherits="aspxWeb.MultiUpload

  • asp.net 简便无刷新文件上传系统

    ps:flash实现的效果是好得多,但这不是我研究的范围,也没什么可比性. 兼容:ie6/7/8, firefox 3.5.5, opera 10.01, safari 4.0.3, chrome 3.0 效果预览 文件上传 选择文件 重命名 操作 状态 重置 选择文件 重置 选择文件 重置 选择文件 ps:由于需要后台,要测试系统请下载实例测试. ps2:在完整实例文件中,还有一个文件属性查看实例. 程序说明 [upload] 程序中最重要的方法就是upload了,调用它就可以进行无刷新上传.

  • asp.net 2.0的文件上传(突破上传限制4M)

    复制代码 代码如下: if (FileUpload1.HasFile) try { FileUpload1.SaveAs("d:\\luceneData\\" + FileUpload1.FileName); Label1.Text = "File name: " + FileUpload1.PostedFile.FileName + "<br>" + FileUpload1.PostedFile.ContentLength + &q

  • asp.net 模拟提交有文件上传的表单(通过http模拟上传文件)

    我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端. 下面是一个简单的html form,两个文本输入框,一个文件上传(这里我选择一张图片),注意有文件上传的form的enctype属性. 复制代码 代码如下: <form action="sql.aspx" method="post" enctype="multipart/form-data"> <input id="

随机推荐