当前记录的都是在工作中自己遇到的问题,记录下来是希望再次遇到时,可以直接应用,不需要花费很多的时间查找资料,当然,以下的方法大部分都是参照网上已有的资源,只是略作整合,引用时根据自己的实际情况做一下扩展。

vue前端,上传按钮--> 上传选择对话框js

<el-buttonsize="mini"type="text"icon="el-icon-document-add"@click="handleUpload()"
>上传
</el-button><el-dialog :title="Title" :visible.sync="open" width="600px" append-to-body:close-on-click-modal=false><el-uploadref="upload":limit="1":on-remove="handleRemove":on-error="onError":file-list="fileList":auto-upload="false":http-request="uploadFile"action="https://jsonplaceholder.typicode.com/posts/"class="upload-demo"><el-button slot="trigger" size="small" type="primary">选取文件</el-button><el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button><div slot="tip" class="el-upload__tip">支持上传 {{ strRebuild(fileType) }} 格式,且不超过 {{ fileSize }}M</div></el-upload>
</el-dialog>

js代码

import { lastSubstring, strRebuild } from '@/utils/strUtil'
import { message } from '@/utils/message'export default {data() {return {title: '',open: false,// 附件列表fileList: [],// 允许的文件类型,可依据实际需求增加格式// fileType: ['xls', 'xlsx', 'pdf', 'doc', 'docx', 'txt', 'jpg', 'png', 'jpeg', 'zip'],fileType: ['pdf', 'doc', 'zip'],// 运行上传文件大小,单位 MfileSize: 10,
}
},
methods{
handleUpload() {this.title = 'XXXX'this.open = true
},
// 清空表单
clear() {// 清空附件this.$refs.upload.clearFiles()
},// 附件检查
// 检查附件是否属于可上传类型
// 检查附件是否超过限制大小
checkFile() {var flag = truevar tip = ''var files = this.$refs.upload.uploadFilesfiles.forEach(item => {// 文件过大if (item.size > this.fileSize * 1024 * 1024) {flag = falsetip = ' 文件超过' + this.fileSize + 'M'}// 文件类型不属于可上传的类型if (!this.fileType.includes(lastSubstring(item.name, '.'))) {flag = falsetip = ' 文件类型不可上传'this.clientOpen = false}})if (!flag) {message('error', tip)}return flag
},// 提交附件
submitUpload() {if (this.checkFile()) {console.log('上传附件...')this.$refs.upload.submit()} else {console.log('取消上传')}
},// 自定义文件上传方法
uploadFile(file) {// 把文件放入 FormData 进行提交const name = 'XXXX'const param = new FormData()param.append('files', file.file)
//传递其他信息param.append('name', name)uploadFile(param).then(response => {if (response.code === 200) {this.open = falsethis.msgSuccess('上传成功')} else {this.msgSuccess('上传失败')this.open = false}})
},// 移除附件
handleRemove(file, fileList) {console.log('移除附件...')
},// 附件上传失败,打印下失败原因
onError(err) {message('error', '附件上传失败')console.log(err)
},// 字符串重组
strRebuild(str) {return strRebuild(str)
}
},

工具类 JS

strUtil.js,创建js 文件

// 字符串相关工具类
// 数组根据分隔符重组为字符串
export function strRebuild(arr, split) {if (arr === undefined || arr === null || !(arr instanceof Array) || arr.length === 0) {return ''}if (split === undefined || split === null) {split = ','}var str = ''arr.forEach((v, i) => {if (i === arr.length - 1) {str = str + v} else {str = str + v + split}})return str
}// 截取最后一个特定字符后面的字符串
export function lastSubstring(str, split) {if (str === undefined || str === null || split === undefined || split === null) {return ''}return str.substring(str.lastIndexOf(split) + 1)
}

message.js,创建js 文件

import { Message } from 'element-ui'// 提示封装 type 提示类型, msg 提示信息,duration 持续时间
export function message(type, msg, duration) {Message({message: msg || 'success',type: type || 'success',duration: duration || 5 * 1000})
}// 带删除键提示,duration 为 0 时,不会自动消失
// 提示封装 type 提示类型, msg 提示信息,duration 持续时间
export function messageShowClose(type, msg, duration) {Message({message: msg || 'success',type: type || 'success',duration: duration || 0,showClose: true})
}

API,接口的具体地址按实际情况来填写,内容可以不变,因为vue传的是param = new FormData()数据,所以在这里只要一个参数就可以了

export function uploadFile(file) {return request({url: '/uploadFile',method: 'post',headers: {'Content-Type': 'multipart/form-data; charset=utf-8'},data:file,})
}后端接口

很多人参照网上的方法都会提示 MultipartFile.transferTo(dest) 这个错误,对这个错误我也不过多的解释,有兴趣的可以自己查阅,我以下代码给出最终的解决方案。

自定义保存路径

private String destfileDir = ".XXXXXX/XXX/XXX";//(根据实际情况而定)

/*** 上传客户端文件并保存* @param* @return*/@PostMapping(value = "/uploadFile")public AjaxResult uploadFile(@RequestParam("files") MultipartFile[] files, @RequestParam("name") String name) {// 先设定一个放置上传文件的文件夹(该文件夹可以不存在,下面会判断创建)TCertmanagerinfo tCertmanagerinfo = new TCertmanagerinfo();for (MultipartFile file : files) {// 判断文件是否有内容if (file.isEmpty()) {System.out.println("该文件无任何内容!!!");}// 获取附件原名(有的浏览器如chrome获取到的是最基本的含 后缀的文件名,如myImage.png)// 获取附件原名(有的浏览器如ie获取到的是含整个路径的含后缀的文件名,如C:\\Users\\images\\myImage.png)String fileName = file.getOriginalFilename();// 如果是获取的含有路径的文件名,那么截取掉多余的,只剩下文件名和后缀名if (fileName.indexOf("\\") > 0) {int index = fileName.lastIndexOf("\\");fileName = fileName.substring(index + 1);}// 判断单个文件大于1Mlong fileSize = file.getSize();if (fileSize > 1024 * 1024) {System.out.println("文件大小为(单位字节):" + fileSize);System.out.println("该文件大于1M");}// 当文件有后缀名时 自定义文件名nameif (fileName.indexOf(".") >= 0) {// split()中放正则表达式; 转义字符"\\."代表 "."String[] fileNameSplitArray = fileName.split("\\.");// 加上random戳,防止附件重名覆盖原文件
//                fileName = fileNameSplitArray[0] + (int) (Math.random() * 100000) + "." + fileNameSplitArray[1];fileName = name+ "." + fileNameSplitArray[1];}// 当文件无后缀名时(如C盘下的hosts文件就没有后缀名)if (fileName.indexOf(".") < 0) {// 加上random戳,防止附件重名覆盖原文件fileName = name;}// 根据文件的全路径名字(含路径、后缀),new一个File对象destFile dest = new File(new File(destfileDir).getAbsolutePath() + "/" + fileName);// 如果pathAll路径不存在,则创建相关该路径涉及的文件夹;if (!dest.getParentFile().exists()) {dest.getParentFile().mkdirs();}try {// 将获取到的附件file,transferTo写入到指定的位置(即:创建dest时,指定的路径)file.transferTo(dest);} catch (IllegalStateException | IOException e) {e.printStackTrace();}}return AjaxResult.success();}

这样上传附件功能就实现了,更多的操作可以依据实际情况添加自己的业务。

Vue实现附件上传功能相关推荐

  1. WangEditor增加附件上传功能

    WangEditor增加附件上传功能 WangEditor富文本官方地址 // 上传附件功能 // 第一,菜单 class ,Button 菜单继承 BtnMenu classclass FileMe ...

  2. Vue 实现附件上传

    Vue 附件上传示例 前言 前端部分 HTML JS 工具类 JS API 后端接口 前言 前端 UI 是用的是 element-ui 的上传功能 本文主要记录下代码,方便下次复制粘贴 前端部分 HT ...

  3. activiti扩展节点属性(在UserTask节点上添加附件上传功能)

    给节点添加属性: 1.首先在stencilset.json上模仿其他属性添加新的节点属性的基础配置 注意type属性前端根据这个属性值去确认改节点属性在页面上所要表现得形式 ​ {"name ...

  4. vue 上传图像 php处理,通过 Laravel + Vue 实现文件上传功能

    通过 Laravel + Vue 实现文件上传功能 由 学院君 创建于2年前, 最后更新于 5个月前 版本号 #2 9048 views 3 likes 0 collects 我们在前面的教程中已经实 ...

  5. vue实现图片上传功能

    vue实现图片上传功能 一.vue的核心插件 1. vuex 2. vue-router 二.服务器代理配置 三.路由配置 四.自定义axios 五.请求服务器逻辑 六.vuex-store 七.登录 ...

  6. 【若依(ruoyi)】附件上传功能

    前言 若依(ruoyi): v4.6.0 layui: 2.3.0.参考这里. jQuery: v2.1.4 附件上传功能 表格使用若依(ruoyi)封装的bootstrapTable 表格数据加载使 ...

  7. Vue实现图片上传功能:

    1.前端API: export const commonUpload=obj=>{return request({url:`/api/common/upload`,method:'post',d ...

  8. vue实现文件上传功能

    代码如下所示: <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...

  9. java上传文件限制大小_Java Web:附件上传,两种文件上传限制格式及大小方法,学习笔记文件操作【诗书画唱】...

    附件上传: package com.jy.controller; import java.io.File; import java.io.FileOutputStream; import java.i ...

  10. Dynamics 365 OP的UCI下附件上传超过大小限制后的提示错误

    针对CRM自带的附件上传功能,对于用户上传附件的大小限制是可以设置的,比如像下图这样 但是在UCI里确碰到了如下的错误,当我上传的附件大于10M时,页面弹出的错误确是5M,而不是实际设置的大小 在Cl ...

最新文章

  1. android: SharedPreferences存储
  2. python提取个十百千位数字_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
  3. boost::math::catmull_rom用法的测试程序
  4. linux 下简单的ftp客户端程序
  5. VC 6中使用不同调用规范的函数在符号文件里的表示方式
  6. [Node.js] 模块化 -- url、querystring模块
  7. Element-UI-的登录页面_改进---Element-UI工作笔记006
  8. ES6学习笔记(对象)
  9. Docker镜像下载加速的两种方法
  10. 深度解读企业微信与个人微信的区别?
  11. Python基础入门:函数--阿里云天池
  12. 网络socket编程--多路复用
  13. echart 环形饼图设置中心固定信息
  14. OpenCV | 直线拟合fitline函数
  15. 达里奥:我阅人无数,没有一个成功人士天赋异禀 |【经纬低调分享】
  16. linux 命令行别名,bash命令行实用的别名-alias命令
  17. DOSBox简单指令
  18. Linux下Rootkit介绍
  19. 走入 Cocos Creator视频教程-姜威-专题视频课程
  20. vue指令模式 添加埋点

热门文章

  1. inductive learning (归纳学习)与 transductive learning(直推学习)
  2. 八皇后问题 (25分)
  3. 银行流水、财报、年报、电费分割单等各类文档一键提取,达观表格提取工具再升级!
  4. pandas抽样函数sample
  5. 云服务器的出网宽带和入网宽带是什么?
  6. 东进的语音卡编程:最简单的电话外呼程序
  7. 联想笔记本 插电源 拔电源 黑屏问题解决。
  8. 计算机桌面word不见怎么办,电脑桌面word 电脑桌面上word不见了怎么办
  9. Mac苹果电脑桌面上的文件突然没了怎么办
  10. python显示安装失败_Win7安装Python失败 提示Setup failed