前言:

  从开始学习Vue到使用element-ui-admin已经有将近快两年的时间了,在之前的开发中使用element-ui上传组件el-upload都是直接使用文件选取后立即选择上传,今天刚好做了一个和之前类似的文件选择上传的需求,不过这次是需要手动点击按钮把文件上传到服务器中进行数据导入,而且最多只能够选择一个文件进行上传,上传成功后需要对file-list中的文件列表数据进行清空操作,在这里服务端使用的是ASP.NET Core WEB API来进行文件流数据接收和保存。

一、简单概述el-upload文件上传组件:

el-upload组件详情,查看官方解释:

https://element.eleme.cn/#/zh-CN/component/upload

常用的基本属性:

参数 说明 类型 可选值 默认值
action 必选参数,上传的地址 string
headers 设置上传的请求头部 object
multiple 是否支持多选文件 boolean
data 上传时附带的额外参数 object
name 上传的文件字段名 string file
with-credentials 支持发送 cookie 凭证信息 boolean false
show-file-list 是否显示已上传文件列表 boolean true
drag 是否启用拖拽上传 boolean false
accept 接受上传的文件类型(thumbnail-mode 模式下此参数无效) string
on-preview 点击文件列表中已上传的文件时的钩子 function(file)
on-remove 文件列表移除文件时的钩子 function(file, fileList)
on-success 文件上传成功时的钩子 function(response, file, fileList)
on-error 文件上传失败时的钩子 function(err, file, fileList)
on-progress 文件上传时的钩子 function(event, file, fileList)
on-change 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用 function(file, fileList)
before-upload 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。 function(file)
before-remove 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。 function(file, fileList)
list-type 文件列表的类型 string text/picture/picture-card text
auto-upload 是否在选取文件后立即进行上传 boolean true
file-list 上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}] array []
http-request 覆盖默认的上传行为,可以自定义上传的实现 function
disabled 是否禁用 boolean false
limit 最大允许上传个数 number

二、需要实现的效果:

  通过单击文件上传按钮,能够弹窗一个Dialog文件选择框,通过点击选取文件按钮选择需要导入的Excel文件,然后手动点击数据导入按钮将Excel文件流通过Post请求传输到ASP.NET Core后台服务中,并进行数据保存操作。

弹出框效果如下图所示:

三、代码实现:

前端Vue代码实现:

注意,清空已上传的文件列表:

需要ref="upload"和file-list="fileList"这两个属性同时存在,否则即使调用this.$refs.upload.clearFiles();该方法也无效

Template代码:

<template>
<div>
<el-dialog title="数据导入" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
<el-upload
class="upload-demo"
ref="upload"
:action="actionRequestUrl"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="fileUploadSuccess"
:on-error="fileUploadFail"
:on-change="fileChange"
:file-list="fileList"
:limit="1"
:auto-upload="false"
:headers="headers">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<el-button size="small" @click="downloadTemplate">导入模板下载</el-button>
<div slot="tip" class="el-upload__tip">请按照导入模板中的数据格式导入</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<!-- <el-button type="primary" @click="dialogVisible = false">确 定</el-button> -->
<el-button style="margin-left: 10px;" type="success" @click="submitUpload">数据导入</el-button>
<!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
</span>
</el-dialog>
</div>
</template>

Js中代码:

<script>
data() {
return {
fileList: [], //文件列表
dialogVisible: false,//Dialog显示状态
headers: { "X-Token": jwtToken }//设置上传的请求头部
fileDownloadUrl:'www.xxxx.com',//文件下载地址
actionRequestUrl:'www.xxxx.com/fileUpload'//请求服务器接口地址
}},
//执行相关的方法
methods: {
//打开导入弹窗
openImporDialog() {
this.dialogVisible = true;
},
//关闭弹窗
handleClose() {
this.dialogVisible = false;
},
//上传到服务器
submitUpload() {
console.log(this.fileList);
if (this.fileList.length <= 0) {
this.$message.error("请先选择需要上传的文件!");
return false;
}
this.$refs.upload.submit();
},
//文件上传服务端失败时的钩子
fileUploadFail: function(err, file, fileList) {
console.log("文件上传失败", file, fileList);
},
//文件上传服务端成功时的钩子
fileUploadSuccess: function(response, file, fileList) {
console.log("上传成功");
console.log(response);
//清空已上传的文件列表
this.$refs.upload.clearFiles();
if (response.result) {
this.dialogVisible = false;
this.$message({
message: response.message,
type: "success"
});
} else {
this.$message.error(response.message);
}
},
//文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
fileChange(file, fileList) {
//解决无法判断el-upload是否上传过文件问题
this.fileList = fileList;
console.log("选择文件上传成功后显示的内容》", file, fileList);
},
//文件列表移除文件时的钩子
handleRemove(file, fileList) {
this.fileList = [];
// return this.$confirm(`确定移除 ${file.name}?`);
},
//点击文件列表中已上传的文件时的钩子
handlePreview(file) {
console.log(file);
},
//导入模板下载
downloadTemplate() {
window.location.href =this.fileDownloadUrl+"/xxxExcel导入模板.xlsx";
}
}
</script>

服务端ASP.NET Core WEB API来进行文件流数据接收和保存:  

ASP.NET Core单文件和多文件上传并保存到服务端详情概述:

https://www.cnblogs.com/Can-daydayup/p/12637100.html

using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; namespace FileUploadManage.Controllers
{
/// <summary>
/// 图片,视频,音频,文档等相关文件通用上传服务类
/// </summary>
public class FileUploadController : Controller
{
private static IHostingEnvironment _hostingEnvironment; public FileUploadController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
} /// <summary>
/// Form表单之单文件上传
/// </summary>
/// <param name="formFile">form表单文件流信息</param>
/// <returns></returns>
public JsonResult FormSingleFileUpload(IFormFile formFile)
{
var currentDate = DateTime.Now;
var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于HttpContext.Current.Server.MapPath("") try
{
var filePath = $"/UploadFile/{currentDate:yyyyMMdd}/"; //创建每日存储文件夹
if (!Directory.Exists(webRootPath + filePath))
{
Directory.CreateDirectory(webRootPath + filePath);
} if (formFile != null)
{
//文件后缀
var fileExtension = Path.GetExtension(formFile.FileName);//获取文件格式,拓展名 //判断文件大小
var fileSize = formFile.Length; if (fileSize > * * ) //10M TODO:(1mb=1024X1024b)
{
return new JsonResult(new { isSuccess = false, resultMsg = "上传的文件不能大于10M" });
} //保存的文件名称(以名称和保存时间命名)
var saveName = formFile.FileName.Substring(, formFile.FileName.LastIndexOf('.')) + "_" + currentDate.ToString("HHmmss") + fileExtension; //文件保存
using (var fs = System.IO.File.Create(webRootPath + filePath + saveName))
{
formFile.CopyTo(fs);
fs.Flush();
} //完整的文件路径
var completeFilePath = Path.Combine(filePath, saveName); return new JsonResult(new { isSuccess = true, returnMsg = "上传成功", completeFilePath = completeFilePath });
}
else
{
return new JsonResult(new { isSuccess = false, resultMsg = "上传失败,未检测上传的文件信息~" });
} }
catch (Exception ex)
{
return new JsonResult(new { isSuccess = false, resultMsg = "文件保存失败,异常信息为:" + ex.Message });
} }
}
}

ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件的更多相关文章

  1. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线

    重温.NET下Assembly的加载过程   最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后 ...

  2. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  3. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

  4. 如何在ASP.NET Core Web API测试中使用Postman

    使用Postman进行手动测试 如果您是开发人员,测试人员或管理人员,则在构建和使用应用程序时,有时了解各种API方法可能是一个挑战. 使用带有.NET Core的Postman为您的Web API生 ...

  5. ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

    一.前言 这几年前端的发展速度就像坐上了火箭,各种的框架一个接一个的出现,需要学习的东西越来越多,分工也越来越细,作为一个 .NET Web 程序猿,多了解了解行业的发展,让自己扩展出新的技能树,对自 ...

  6. List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac

    List多个字段标识过滤 class Program{  public static void Main(string[] args) { List<T> list = new List& ...

  7. ASP.NET Core Web API中使用Swagger

    本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger   在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...

  8. asp.net core web api 生成 swagger 文档

    asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...

  9. 如何在ASP.NET Core Web API中使用Mini Profiler

    原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...

  10. Asp.Net Core Web Api 使用 Swagger 生成 api 说明文档

    最近使用 Asp.Net Core Web Api 开发项目服务端.Swagger 是最受欢迎的 REST APIs 文档生成工具之一,进入我的视野.以下为学习应用情况的整理. 一.Swagger 介 ...

随机推荐

  1. VS2017配置opencv-4.2.0详细步骤

    VS2017配置opencv-4.2.0详细步骤   1.下载opencv的安装包并解压.下载网址https://sourceforge.net/projects/opencvlibrary/ 图1 ...

  2. Mysql数据库定时全库备份

    如下脚本用于mysql全库定时备份 mysql_dump_script.sh #!/bin/bash #保存备份个数,最多保留4个文件 number=4 #备份保存路径 backup_dir=/db/ ...

  3. LCN解决分布式事务原理解析+项目实战(原创精华版)

    写在前面: 原创不易,如果觉得不错推荐一下,谢谢! 由于工作需要,公司的微服务项目需解决分布式事务的问题,且由我进行分布式事务框架搭建和整合工作. 那么借此机会好好的将解决分布式事务的内容进行整理一下 ...

  4. MATLAB中的Regex

    regexprep——用于对字符串进行查找并替换. regexp Definition: 用于对字符串进行查找,大小写敏感. startIndex = regexp(str,expression) 返 ...

  5. 洛谷P1000超级马里奥的神奇解法

    话说上过洛谷的都知道,有一道经典例题P1000超级马里奥,这一题,可以说是非常简单非常经典,但是就算如此,还是可以人才辈出,我是个比较循规蹈矩的人(雾),所以我的代码就比较平常,也就是直接输出了所要求 ...

  6. 超强图文|并发编程【等待/通知机制】就是这个feel~

    你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...

  7. C++ 线程添加互斥量

    //创建互斥量 HANDLE g_hMutex = NULL; WaitForSingleObject(g_hMutex, INFINITE); ReleaseMutex(g_hMutex);

  8. 从零搭建Spring Cloud Gateway网关(二)—— 打印请求响应日志

    作为网关,日志记录是必不可少的功能,可以在网关出增加requestId来查询整个请求链的调用执行情况等等. 打印请求日志 打印请求日志最重要的就是打印请求参数这些东西,不过RequestBody通常情 ...

  9. onOK Modal.warning iview 要写一个函数 套上,不然会得不到异步调用,直接弹出的时候就执行了

    export const warning = (str, callback = _ => {}, outCallback = () => {}) => { Modal.warning ...

  10. 【Weiss】【第03章】练习3.18:检查平衡符号

    [练习3.18]用下列语言编写检测平衡符号的程序 a.Pascal ( begin/end, ( ), [ ], { } ). b.C语言( /* */, ( ), [ ], { }). c.解释如何 ...