vue+element+upload实现头像上传

摘要:
filePath.exists()&&!

vue+element+upload实现头像上传第1张

后台

    @RequestMapping("/up")
    public JSONObject up(@RequestParam("picFile") MultipartFile picture,HttpServletRequest request) {
                
        
                    System.out.println(picture.getContentType());
            
        //获取文件在服务器的储存位置
        String path = request.getSession().getServletContext().getRealPath("/upload");
        File filePath = newFile(path);
        System.out.println("文件的保存路径:" +path);
        if (!filePath.exists() && !filePath.isDirectory()) {
            System.out.println("目录不存在,创建目录:" +filePath);
            filePath.mkdir();
        }

        //获取原始文件名称(包含格式)
        String originalFileName =picture.getOriginalFilename();
        System.out.println("原始文件名称:" +originalFileName);

        //获取文件类型,以最后一个`.`为标识
        String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
        System.out.println("文件类型:" +type);
        //获取文件名称(不包含格式)
        String name = originalFileName.substring(0, originalFileName.lastIndexOf("."));

        //设置文件新名称: 当前时间+文件名称(不包含格式)
        Date d = newDate();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String date =sdf.format(d);
        String fileName = date + name + "." +type;
        System.out.println("新文件名称:" +fileName);

        //在指定路径下创建一个文件
        File targetFile = newFile(path, fileName);

        //将文件保存到服务器指定位置
        try{
            picture.transferTo(targetFile);
            System.out.println("上传成功");
            //将文件在服务器的存储路径返回
            return null;
        } catch(IOException e) {
            System.out.println("上传失败");
            e.printStackTrace();
            return null;
        }
   
    }

前台

<template>
  <div>
    <el-button type="success"@click="dialogVisible2 = true">点击打开 Dialog</el-button>
    <el-dialog title="上传头像":visible.sync="dialogVisible2"width="30%">
      <el-form :model="form">
        <el-form-item :label-width="formLabelWidth"
                      ref="uploadElement">
          <el-upload ref="upload"action="#"accept="image/png,image/gif,image/jpg,image/jpeg"list-type="picture-card":limit=limitNum
                     :auto-upload="false":on-exceed="handleExceed":before-upload="handleBeforeUpload":on-preview="handlePictureCardPreview":on-remove="handleRemove":on-change="imgChange":class="{hide:hideUpload}">
            <i class="el-icon-plus"></i>
          </el-upload>
          <el-dialog :visible.sync="dialogVisible">
            <img width="100%":src="dialogImageUrl"alt="">
          </el-dialog>
        </el-form-item>
        <el-form-item>
          <el-button size="small"type="primary"@click="uploadFile">立即上传</el-button>
          <el-button size="small"@click="tocancel">取消</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>
  </div>

</template>

<script>export default{
  data () {
    return{
      hideUpload: false,
      dialogImageUrl: '',
      dialogVisible: false,//图片预览弹窗
      formLabelWidth: '80px',
      limitNum: 1,
      form: {},
      dialogVisible2: false//弹窗
}
  },
  methods: {
    //上传文件之前的钩子
handleBeforeUpload (file) {
      if (!(file.type === 'image/png' || file.type === 'image/gif' || file.type === 'image/jpg' || file.type === 'image/jpeg')) {
        this.$notify.warning({
          title: '警告',
          message: '请上传格式为image/png, image/gif, image/jpg, image/jpeg的图片'})
      }
      let size = file.size / 1024 / 1024 / 2
      if (size > 2) {
        this.$notify.warning({
          title: '警告',
          message: '图片大小必须小于2M'})
      }
      let fd = new FormData();//通过form数据格式来传
      fd.append("picFile", file); //传文件
      console.log(fd.get('picFile'));
      this.api({
        url: "/test/up",
        method: "post",
        data: fd,
        headers: {
          'Content-Type': 'multipart/form-data'}
      }).then((data) =>{

      })
    },
    //文件超出个数限制时的钩子
handleExceed (files, fileList) {

    },
    //文件列表移除文件时的钩子
handleRemove (file, fileList) {
      this.hideUpload = fileList.length >= this.limitNum;

    },
    //点击文件列表中已上传的文件时的钩子
handlePictureCardPreview (file) {
      this.dialogImageUrl =file.url;
      this.dialogVisible = true;
    },
    uploadFile () {
      this.$refs.upload.submit()

    },
    imgChange (files, fileList) {
      this.hideUpload = fileList.length >= this.limitNum;
      if(fileList) {
        this.$refs.uploadElement.clearValidate();
      }
    },
    tocancel () {
      this.dialogVisible2 = false


    }
  }
}
</script>

<style lang="scss" >.hide .el-upload--picture-card {
  display: none;
}
</style>

免责声明:文章转载自《vue+element+upload实现头像上传》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第11章 索引的管理与维护SQL SERVER 分区下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Perl文件系统

一、文件输入/输出函数 1、基本I/O函数 open:允许程序访问文件  close:终止文件访问  print:文件写入字符串  write:向文件写入格式化信息  printf:格式化字符串并输出到文件  1)open函数 open函数将文件变量与某文件联系起来,提供访问文件的接口,例如:open(MYVAR, "/u/file"); 如果文件打开成功...

HTTP协议详解(深入理解)

版权声明:本文为CSDN博主「有抱负的小狮子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_38087538/article/details/82838762 引入 超文本传输协议(HTTP,HyperText Transfer Protocol...

[ PyQt入门教程 ] PyQt5中多线程模块QThread使用方法

本文主要讲解使用多线程模块QThread解决PyQt界面程序唉执行耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题。用户使用工具过程中出现这些问题时会误以为程序出错,从而把程序关闭。这样,导致工具的用户使用体验不好。下面我们通过模拟上述出现的问题并讲述使用多线程QThread模块解决此类问题的方法。 PyQt程序卡顿和无法实时显示问题现象 使...

OO实现ALV TABLE 十:ALV的页眉页脚

除了可以通过类CL_SALV_EVENTS_TABLE的事件设置ALV的页眉页脚之外,还可以通过类CL_SALV_TABLE的方法SET_TOP_OF_LIST,SET_TOP_OF_LIST_PRINT, SET_END_OF_LIST,SET_END_OF_LIST_PRINT这四个方法。页眉页脚的显示可以设置显示和打印时不一样,打印时的页眉页脚通过方...

post请求body格式

在PostMan中用Post方式,Body有form-data,x-www-form-urlencoded,raw,binary四种。 其中raw又分以下7种。 现在来区分一下: form-data是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的...

JavaEE系列之(二)commons-fileupload实现文件上传、下载

一、文件上传概述     实现Web开发中的文件上传功能,需要两步操作:     1、在Web页面中添加上传输入项 <form action="#" method="post" enctype="multipart/form-data"> <input type="file" name="file...