spring boot实现图片上传和下载功能

这篇文章主要为大家详细介绍了spring boot实现图片上传和下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

 这篇博客简单介绍下spring boot下图片上传和下载,已经遇到的问题。首先需要创建一个spring boot项目。

1、核心的controller代码

package com.qwrt.station.websocket.controller; import com.alibaba.fastjson.JSONObject; import com.qwrt.station.common.util.JsonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.multipartfile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; /** * Created by jack on 2017/10/30. */ @RestController @RequestMapping("v1/uploadDownload") public class UploadDownloadController { private static final Logger logger = LoggerFactory.getLogger(UploadDownloadController.class); @Value("${uploadDir}") private String uploadDir; @RequestMapping(value = "/uploadImage", method = RequestMethod.POST) public JSONObject uploadImage(@RequestParam(value = "file") multipartfile file) throws RuntimeException { if (file.isEmpty()) { return JsonUtil.getFailJsonObject("文件不能为空"); } // 获取文件名 String fileName = file.getoriginalFilename(); logger.info("上传文件名为:" + fileName); // 获取文件的后缀名 String suffixName = fileName.substring(fileName.lastIndexOf(".")); logger.info("上传的后缀名为:" + suffixName); // 文件上传后的路径 String filePath = uploadDir; // 解决中文问题,liunx下中文路径,图片显示问题 // fileName = UUID.randomUUID() + suffixName; File dest = new File(filePath + fileName); // 检测是否存在目录 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } try { file.transferTo(dest); logger.info("上传成功后的文件路径未:" + filePath + fileName); return JsonUtil.getSuccessjsonObject(fileName); } catch (IllegalStateException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } return JsonUtil.getFailJsonObject("文件上传失败"); } //文件下载相关代码 @RequestMapping(value = "/downloadImage",method = RequestMethod.GET) public String downloadImage(String imageName,HttpServletRequest request, HttpServletResponse response) { //String fileName = "123.JPG"; logger.debug("the imageName is : "+imageName); String fileUrl = uploadDir+imageName; if (fileUrl != null) { //当前是从该工程的WEB-INF//File//下获取文件(该目录可以在下面一行代码配置)然后下载到C:\users\downloads即本机的认下载的目录 /* String realPath = request.getServletContext().getRealPath( "//WEB-INF//");*/ /*File file = new File(realPath, fileName);*/ File file = new File(fileUrl); if (file.exists()) { response.setContentType("application/force-download");// 设置强制下载不打开 response.addheader("Content-disposition", "attachment;fileName=" + imageName);// 设置文件名 byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getoutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } System.out.println("success"); } catch (Exception e) { e.printstacktrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printstacktrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printstacktrace(); } } } } } return null; } }

     上面的代码有两个方法,上面的方法图片上传方法,下面的方法图片下载的方法。下载图片需要传入图片文件名,在ios,android手机,谷歌浏览器测试,上传下载没有问题。

2、测试的html的核心代码如下,进行图片上传和下载:

websocket chat 输入信息:

发送消息websocket连接断开websocket连接

上面的代码有些和图片上传和下载没有关系,根据需要自己去掉,看图片上传和下载的核心代码,需要引入jquery。

3、spring boot的属性配置:

1.解决图片上传太大的问题:

spring: http: multipart: max-file-size: 100Mb #文件上传大小 max-request-size: 200Mb #最打请求大小

这是新版spring boot解决图片或者文件上传太大的问题,老板的不是这样解决的。可以自己查资料

2.配置文件上传保存的位置:

#上传位置 uploadDir: F:mystudypic

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

元宵节福利:

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...