vue前端代码

前端主要使用了ElementUI的el-uploda插件,除去业务代码需要注意的是使用formdata存储片上传时所需的参数

      <el-upload
class="upload-demo"
multiple
ref="upload"
action="#"
accept=".jpg,.tif"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-upload="handleBefore"
:http-request="handleHttpRequest"
:on-change="handleChange"
:file-list="fileList"
:auto-upload="false">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<el-button
style="margin-left: 10px; margin-right: 20px"
size="small"
type="success"
@click="handleUpload">上传到服务器</el-button>
</el-upload> data(){
fileList: [], // 上传文件列表
} methods:{
//上传前回调
handleBefore: function (file) {
// this.picData={
// name:file.name,
// picType:0
// }
},
// 覆盖默认的上传行为,可以自定义上传的实现
handleHttpRequest: function (para) {},
// 文件列表移除文件时的钩子
handleRemove: function (file, fileList) {
// console.log(file, fileList);
},
handleChange(file, fileList) {
this.fileList = fileList;
},
//上传到服务器
handleUpload() {
if (this.selectPicType !== null && this.fileList.length>0) {
let _this = this;
//使用formdata添加上传时所带参数
let formData = new FormData();
let data = [];
let imageType = true;
let selectDocument = this.selectDocumentType=="第一部分" ? 0 : this.selectDocumentType=="第二部分" ? 1 : this.selectDocumentType=="第三部分" ? 2 : "";
if(this.selectPicType == 2 && this.selectDocumentType=='') {
this.$message({
type:'error',
message: '请选择目录!'
})
return;
}
this.fileList.forEach((item) => {
var imgName = new RegExp(/^\d+\.(jpg|tif)$/);
if(!(imgName.test(item.name))) {
imageType = false;
}
formData.append("files", item.raw);
data.push({
VId: this.fuId, //退役军人个人信息id
DId: this.currenttMaterialId, //目录材料id
ServerPathId: 1,
BackUpPathId: 1,
PicName: item.name,
picType: this.selectPicType, //上传类型
TextType: selectDocument, //正文中的目录
ReelNumber: this.fuReelNumber, //上传卷号
VName: this.fuVName, //退役军人姓名
ArchivesYear: this.fuarchivesYear //年度
});
});
if(imageType == false) {
this.$message({
type: 'error',
message: '请选择名称为数字的文件,并且是jpg和tif格式'
})
this.fileList = [];
return;
} else if (imageType == true) {
formData.append("params",JSON.stringify( data));
multiFileUpload(formData).then((res) => {
this.getCurrentList();
this.$message({
type:"success",
message: "上传成功"
})
this.catalog = false;
this.inputShow = false;
this.fileList = [];
this.selectPicType = null;
this.selectDocumentType = '';
selectDocument = '';
this.currenttMaterialId = null;
});
} } else {
this.$message({
type:"error",
message: "选择文件和要上传图片的类型!"
})
} },
// 点击文件列表中已上传的文件时的钩子
handlePreview: function (file) {
// console.log(file);
}
}

后端代码

后台使用Request.Form来接收参数,把图片上传的信息存到出数据库

        /// <summary>
/// 多文件上传
/// </summary>
/// <param name="formCollection">表单集合值</param>
/// <returns>服务器存储的文件信息</returns> [HttpPost]
public JsonResult MultiFileUpload(IFormCollection formCollection)
{
var currentDate = DateTime.Now;
//var webRootPath = _hostingEnvironment.WebRootPath;//>>>相当于HttpContext.Current.Server.MapPath("")
//var webRootPath = _hostingEnvironment.ContentRootPath;//>>>相当于HttpContext.Current.Server.MapPath("")
var uploadFileRequestList = new List<UploadFileRequest>();
var jsondata = Request.Form["params"];
//var UploadPicDTOs = (List<UploadPicDTO>)JsonConvert.DeserializeObject(jsondata,typeof( List< UploadPicDTO >));
var UploadPicDTOs = JsonConvert.DeserializeObject<List<UploadPicDTO>>(jsondata);
var insertPicData = new List<TBase_ImgDetailInfo>(); try
{
//FormCollection转化为FormFileCollection
var files = (FormFileCollection)formCollection.Files; if (files.Any())
{
foreach (var file in files)
{
string filePath = string.Empty;
var uploadFileRequest = new UploadFileRequest();
var picData = UploadPicDTOs.FirstOrDefault(s => s.PicName == file.FileName);
var webRootPath = _tImgServerPathService.QueryById(picData.ServerPathId).Result.ServerPath; if (picData.PicType == 0 || picData.PicType == 1 || picData.PicType == 3)
filePath = $"\\{picData.ArchivesYear}\\{picData.ReelNumber}-{picData.VName}\\";
else
filePath = $"\\{picData.ArchivesYear}\\{picData.ReelNumber}-{picData.VName}\\{picData.TextType + 1}\\"; //创建每日存储文件夹
if (!Directory.Exists(webRootPath + filePath))
{
Directory.CreateDirectory(webRootPath + filePath);
} //文件后缀
var fileExtension = Path.GetExtension(file.FileName);//获取文件格式,拓展名 //判断文件大小
var fileSize = file.Length; if (fileSize > 1024 * 1024 * 10) //10M TODO:(1mb=1024X1024b)
{
continue;
} //保存的文件名称(以名称和保存时间命名)
var saveName = file.FileName.Substring(0, file.FileName.LastIndexOf('.')) + "_" + currentDate.ToString("yyyyMMddHHmmss") + fileExtension;
string fullPath = webRootPath + filePath + saveName; //文件保存
using (var fs = System.IO.File.Create(fullPath))
{
file.CopyTo(fs);
fs.Flush();
} //完整的文件路径
var completeFilePath = Path.Combine(filePath, saveName); uploadFileRequestList.Add(new UploadFileRequest()
{
FileName = saveName,
FilePath = completeFilePath
});
insertPicData.Add(new TBase_ImgDetailInfo()
{
VId = picData.VId,
DId = picData.DId,
ServerPathId = picData.ServerPathId,
BackUpPathId = picData.BackUpPathId,
PicName = picData.PicName,
PicRealName=saveName,
RelativePath = filePath,
//FullPath= fullPath,
PicType = picData.PicType,
TextType = picData.TextType,
ArchivesYear = picData.ArchivesYear,
PicPageNo= int.Parse(file.FileName.Substring(0, file.FileName.LastIndexOf('.'))),
CreateId = _user.ID,
CreateBy = _user.Name
});
}
}
else
{
return new JsonResult(new { isSuccess = false, resultMsg = "上传失败,未检测上传的文件信息~" });
}
}
catch (Exception ex)
{
return new JsonResult(new { isSuccess = false, resultMsg = "文件保存失败,异常信息为:" + ex.Message });
} if (uploadFileRequestList.Any())
{
_tImgDetailInfoService.Add(insertPicData);
return new JsonResult(new { isSuccess = true, returnMsg = "上传成功", filePathArray = uploadFileRequestList });
}
else
{
return new JsonResult(new { isSuccess = false, resultMsg = "网络打瞌睡了,文件保存失败" });
}
} /// <summary>
/// 对文件上传响应模型
/// </summary>
public class UploadFileRequest
{
/// <summary>
/// 文件名称
/// </summary>
public string FileName { get; set; } /// <summary>
/// 文件路径
/// </summary>
public string FilePath { get; set; }
}

netcore3.1 + vue (前后端分离) ElementUI多文件带参数上传的更多相关文章

  1. netcore3.1 + vue (前后端分离)Excel导入

    1.前端(vue)代码 2.公共类ExcelHelper 3.后端(netcore)代码 思路:导入类似于上传,将excel上传后将流转换为数据 1.前端(Vue)代码 这里使用的是ElementUI ...

  2. netcore3.1 + vue (前后端分离) IIS 部署

    1.安装 aspnetcore-runtime-3.1.1-win-x64.exe 2.安装dotnet-hosting-3.1.1-win.exe 3.安装urlrewrite和applicatio ...

  3. netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印

    1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...

  4. SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题

    原文链接:https://segmentfault.com/a/1190000012879279 当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异.笔者前几天刚好在负责一个项目的权限管理 ...

  5. 解决Django+Vue前后端分离的跨域问题及关闭csrf验证

      前后端分离难免要接触到跨域问题,跨域的相关知识请参:跨域问题,解决之道   在Django和Vue前后端分离的时候也会遇到跨域的问题,因为刚刚接触Django还不太了解,今天花了好长的时间,查阅了 ...

  6. Flask + vue 前后端分离的 二手书App

    一个Flask + vue 前后端分离的 二手书App 效果展示: https://blog.csdn.net/qq_42239520/article/details/88534955 所用技术清单 ...

  7. 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

  8. 两个开源的 Spring Boot + Vue 前后端分离项目

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

  9. beego-vue URL重定向(beego和vue前后端分离开发,beego承载vue前端分离页面部署)

    具体过程就不说,是搞这个的自然会动,只把关键代码贴出来. beego和vue前后端分离开发,beego承载vue前端分离页面部署 // landv.cnblogs.com //没有授权转载我的内容,再 ...

随机推荐

  1. F5 api接口开发实战(一)

    本人从18年下旬,开始从事F5负载均衡的自动化开发工作,主要使用python编程语言,开发的F5功能模块为LTM和GTM. F5开发简介 1.F5管理模式 F5的管理模式主要有4种(不包含snmp), ...

  2. CVPR2020:点云三维目标跟踪的点对盒网络(P2B)

    CVPR2020:点云三维目标跟踪的点对盒网络(P2B) P2B: Point-to-Box Network for 3D Object Tracking in Point Clouds 代码:htt ...

  3. 计算机网络-vlan划分

    1.VLAN的划分 (1)基于端口的VLAN: 交换机A上的1,2端口和交换机B上的3,4端口构成一个VLAN. 交换机A上的3,4端口和交换机B上的1,2端口构成一个VLAN. (2)基于MAC地址 ...

  4. MongoDB学习笔记01:入门

    MongoDB简介 MongoDB是一个开源.高性能.无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种.是最 像关系型数据库(MySQL)的非关系型数据库. ...

  5. XML文件存在中文注释报错问题( 3 字节的 UTF-8 序列的字节 3 无效)

    今天在做mybatis项目的时候,给映射文件添加了中文注释后,程序就报错.把中文注释删除后,程序又可以正常执行.解决方法在下文提到. 我的xml映射文件如下: <?xml version=&qu ...

  6. 四、缓存DNS

    作用:缓存解析结果,提高解析速度 搭建方式: 1.全局转发,所有的DNS解析请求全部转发给公网DNS 2.根域迭代,所有的DNS解析请求全部发给根域DNS服务器 真机上实现缓存DNS服务器 1.搭建Y ...

  7. python学习笔记02-简单游戏

    一拖又过去快一个月了,哭聊.. 惰性千万不要有.. 今天简单接触一下条件语句 一个简单的文字游戏 1 print('----第一个文字游戏----') 2 temp = input('猜一下现在心里想 ...

  8. Python编解码问题与文本文件处理

    编解码器 在字符与字节之间的转换过程称为编解码,Python自带了超过100种编解码器,比如: ascii(英文体系) gb2312(中文体系) utf-8(全球通用) latin1 utf-16 编 ...

  9. 禁止特定IP访问Oracle数据库

    通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约束数据库访问控制提供了有效的手段 在sq ...

  10. 大数据初级sy

    1.spark 是用以下哪种编程语言实现的? A.C             B  C++       C   JAVA               D.Scala (正确答案) 2.FusionIn ...