vue 和 ssm框架上传图片

一,pom.xml中配置jar包

<!-- 文件传输 -->
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

二,在springMVC配置文件中配置

	<!--同时让springMVC不要拦截这些静态资源 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--		上传文件大小上限,单位为字节(10MB)-->
		<property name="maxUploadSize">
			<value>20971520</value>
		</property>
<!--		 请求的编码格式,必须和JSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1-->
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
	</bean>

三,导入工具类

public class FileTools {

    //图片上传的返回值就是图片上传之后的新名称
    public static String uploadFile(MultipartFile picture, HttpServletRequest request) {
        //现在的工作是:想办法把用户传过来的文件存储到我们的电脑中
        //先得到原图片的图片名
        String fileName = picture.getOriginalFilename();
        try {
            //得到用户存文件的路径,其实就是项目在我们电脑中的位置
            //realPath就是当前项目在我们电脑硬盘中的位置
            String realPath = request.getSession().getServletContext().getRealPath("/");
            //通过项目目录和图片文件夹名创建一个文件对象
            File file = new File(realPath + "images/");
            //注意,java中的文件对象,不会帮我们自动创建文件夹
            //判断该文件夹是否存在,如果已经存在,不创建
            if (!file.exists()) {
                //mkdir    创建文件夹
                file.mkdir();
            }
            //现在我们将图片根据路径存到文件夹中之前需要将图片重命名
            //UUID 生成32位不重复的字母-数字的字符串
            //fileName  == >    彪.jpg
            UUID randomUUID = UUID.randomUUID();
            //先将原文件的后缀名取出来
            String houzhui = fileName.substring(fileName.lastIndexOf("."));
            //将UUID和原文件后缀拼接在一起
            fileName = randomUUID + houzhui;
            picture.transferTo(new File(realPath + "images/" + fileName));
            //将文件名传回给前端
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //直接将文件夹名称和图片名拼在一起返回
        return "images/" + fileName;
    }

    //下载

    //图片上传的返回值就是图片上传之后的新名称 G:\tianman\library-management-system-master\library-management-system-master\tmsy\target\tmsy\images/aaa.png
    public static void downlodFile(String imgName, HttpServletRequest request, HttpServletResponse response) {
        String realPath = request.getSession().getServletContext().getRealPath("/");

        //获取完整路径
        String allName = realPath + imgName;
        File file = new File(allName);
        response.setContentType("application/x-msdownload");
        response.setHeader("Content-Disposition", "attachment;filename=" + imgName);
        try {
            Files.copy(file.toPath(), response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

四,在后段写上传和下载的方法

@PostMapping("uploadFile")
    public Map<String,Object> uploadFile(MultipartFile file, HttpServletRequest request){
        Map<String,Object> map = new HashMap<>();
        String fileName = FileTools.uploadFile(file, request);
        map.put("code",2000);
        map.put("data",fileName);
        return map;
    }

    @GetMapping("downloadFile")
    public void downloadFile(String fileName, HttpServletRequest request, HttpServletResponse response){
        FileTools.downloadFile(fileName,request,response);
    }

五,在vue展示

songPic是实体类里的图片的属性名字

<el-table-column label="歌曲照片">
        <template slot-scope="scope">
          <img
            v-if="scope.row.songPic"
            style="width: 90px; height: 90px"
            :src="
              'http://localhost:8081/song/downloadFile.do?fileName=' +
              scope.row.songPic
            "
            class="avatar"
          />
          <p v-else>暂无图片</p>
        </template>
      </el-table-column>

新增

data里面需要定义  imageUrl =""

    <el-form-item label="歌曲图片" :label-width="formLabelWidth">
          <el-upload
            class="avatar-uploader"
            action="http://localhost:8081/song/uploadFile.do"
            :show-file-list="false"
            //name属性默认是file 和后端对应
            name="file"
            :on-success="handleAvatarSuccess"
            :before-upload="beforeAvatarUpload"
          >
            <img
              v-if="imageUrl"
              :src="imageUrl"
              class="avatar"
              style="width: 170px; height: 170px"
            />
            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
          </el-upload>
        </el-form-item>



    //成功的方法
    handleAvatarSuccess(res, file) {
      this.imageUrl = this.imageUrl = URL.createObjectURL(res.raw);
      this.form.songPic = res.data;
    },
    ///文件上传前执行的 限制大小限制的
    beforeAvatarUpload(file) {
      const isJPG = file.type === "image/jpeg";
      const isLt2M = file.size / 1024 / 1024 < 50;

      if (!isJPG) {
        this.$message.error("上传头像图片只能是 JPG 格式!");
      }
      if (!isLt2M) {
        this.$message.error("上传头像图片大小不能超过 50MB!");
      }
      return isJPG && isLt2M;
    },

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值