vue+springboot+element+vue-resource实现文件上传教程

时间:2021-09-18 06:37:38

vue页面设置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
   <el-upload
    class="upload-demo"
    action=""
    :before-upload="beforeUpload" //上传前操作
    :before-remove="beforeRemove" //移除钱操作
    :multiple="false"  //禁止多选
    :http-request="myUpload" //文件上传,重写文件上传方法,action的路径不会起作用
    accept=".jar"  //限制文件选择类型
    :drag="false"
    :data="param" //参数
    :file-list="fileList">//文件显示列表
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jar文件,且不超过500kb</div><!-- :headers="head"-->
   </el-upload><!--:on-preview="handlePreview"-->
 
/*文件上传前,判断文件名是否存在,等其他处理*/
beforeUpload(file){
 console.log("文件名",file.name,this.fileList)
 for (let i = 0; i <this.fileList.length ; i++) {
  if (this.fileList[i].name==file.name) {
   this.$message.info("文件已存在");
   return false;
  }
 }
 this.file=file;
 
 return true;
},
 /*文件移除前,提示是否删除*/
beforeRemove(file,fileList){//delJar
 this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  confirmButtonText: '确定',
  cancelButtonText: '取消',
  type: 'warning'
 }).then(() => {
  this.$http.get('/aaaa/task/del?taskId='+this.taskId+'&name='+file.name).then(function(res) {
   ......
  });
 }).catch(() => {
  this.getJarList();
  return false;
 });
},
/*文件上传,重写文件上传方法,action的路径不会起作用*/
myUpload(file){
 let fd = new FormData();
 fd.append('file',this.file);//传文件
 fd.append('taskId',this.taskId);//传其他参数
 // fd.append('filename',file.name);//传其他参数
 this.$http.post('/aaaa/task/add',fd).then(function(res) {
  ....
 });
},

fileList一个对象的内容

?
1
2
3
name:"xxxx.jar"
status:"success"
uid:123456456

参数

?
1
2
3
this.param={
  taskId:this.taskId
}

springboot设置

1.请求的注解:produces = "multipart/form-data;charset=utf-8", method = RequestMethod.POS

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RequestMapping(value = "/add", produces = "multipart/form-data;charset=utf-8", method = RequestMethod.POST)
public String addJar(int taskId, HttpServletRequest request) throws IOException, ServletException {
  ....
  //获取文件
  Part part = request.getPart("file");// input的name值
  String dis = part.getHeader("Content-Disposition");
  // 获取文件名--sdsf.jar
  String fna = dis.substring(dis.indexOf("filename=") + 10, dis.length() - 1);
  String fname = fna.substring(fna.lastIndexOf("\\") + 1, fna.length());// 有的浏览器获取的是路径+文件名
  // 若是文件名为空,说明此时没有选择文件,返回,文件上传失败,选择文件
  if (fname.length() < 1) {
   //此时没有选择文件
  }
  ....
}

补充知识:elementUI upload图片文件上传到指定后端接口解决方法

1. 一般后端提供接口上传文件都有参数。如果我们不传参就会报错或显示图片不存在,上传失败。所以我们要参考他的文档。action 是上传路径; ==name== 就是传参的属性(关键)。

vue+springboot+element+vue-resource实现文件上传教程

?
1
2
3
4
5
6
7
8
9
imageUrl: '',
 
<el-form-item label="封面图片" :required="true">
  <el-upload class="avatar-uploader" action="http://xxx.cn/xx/file/uploadImg/" name='photo' :show-file-list="false"
   :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
   <img v-if="imageUrl" :src="imageUrl" class="avatar">
   <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  </el-upload>
</el-form-item>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
handleAvatarSuccess(res, file) {
    console.log(res)
    console.log(file)
    this.imageUrl = URL.createObjectURL(file.raw);
    console.log(this.imageUrl)
   },
   //验证图片格式
   beforeAvatarUpload(file) {
    const isJPG = file.type === 'image/jpeg';
    const isLt2M = file.size / 1024 / 1024 < 2;
 
    if (!isJPG) {
     this.$message.error('上传头像图片只能是 JPG 格式!');
    }
    if (!isLt2M) {
     this.$message.error('上传头像图片大小不能超过 2MB!');
    }
    return isJPG && isLt2M;
   },

css代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* 图片上传css */
 .avatar-uploader /deep/.el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  overflow: hidden;
 }
 
 .avatar-uploader .el-upload:hover {
  border-color: #409EFF;
 }
 
 .avatar-uploader-icon {
  font-size: 28px;
  color: #8c939d;
  width: 100px;
  height: 100px;
  line-height: 100px;
  text-align: center;
 }
 .avatar {
  width: 100px;
  height: 100px;
  display: block;
 }

参考elementUI文档:https://element.eleme.cn/#/zh-CN/component/upload

以上这篇vue+springboot+element+vue-resource实现文件上传教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/ziyue7575/p/13704151.html