目录
- springboot上传文件并返回url
- springboot上传文件两种方式
springboot上传文件并返回url
1.首先在yml中配置文件上传地址
2.文件保存本地没有配置在服务器上 需要多写一个api,在上传的最后生成一个url
直接上代码
public class StuEmailPhotoServiceImpl implements StuEmailPhotoService { | |
String imageUrl; | |
String imgUrl; | |
StuEmailPhotoMapper stuEmailPhotoMapper; | |
/** | |
* 邮件上传图片 | |
* | |
* @param classId | |
* @param file | |
* @param request | |
* @return | |
*/ | |
public ResultImg batchUpload(Long classId, MultipartFile file, HttpServletRequest request) { | |
if (null == file) { | |
return new ResultImg(ResultInfo.FAIL_CODE, "传入文件为空!"); | |
} | |
String errMsg = null; | |
String newName = null; | |
try { | |
String oldName = file.getOriginalFilename().toLowerCase(); //获取图片的名称 | |
String imgPath = null; | |
newName = classId + "-emailTemplate-" + UUID.randomUUID() + oldName.substring(oldName.lastIndexOf(".")); | |
imgPath = imageUrl + classId; // + "/" + newName | |
File folder = new File(imgPath); | |
//没有文件夹就创建 | |
if (!folder.exists()) { | |
folder.mkdirs(); | |
} | |
//压缩图片再保存outputQuality(f) 越接近1,图片质量越高 | |
String suffix = oldName.substring(oldName.lastIndexOf(".") +); | |
Thumbnails.of(file.getInputStream()).scale(f).outputQuality(1f).outputFormat(suffix).toFile(new File(folder, newName)); | |
//存储图片信息 | |
StuEmailPhoto stuEmailPhoto = new StuEmailPhoto(); | |
stuEmailPhoto.setClassId(classId); | |
stuEmailPhoto.setImgOname(oldName); | |
stuEmailPhoto.setImgName(newName); | |
stuEmailPhoto.setImgUrl(imgPath + "/" + newName); | |
stuEmailPhoto.setCreateTime(DateFormatUtils.getCurrentTime()); | |
stuEmailPhoto.setCreator(SecurityUtils.getCurrentUserId()); | |
stuEmailPhotoMapper.insert(stuEmailPhoto); | |
} catch (Exception e) { | |
errMsg = e.getLocalizedMessage(); | |
log.error("------StuPlatTrans--------batchUpload-----------:" + e); | |
} | |
if (StringUtils.isNotEmpty(errMsg)) { | |
return new ResultImg(ResultInfo.FAIL_CODE, errMsg); | |
} | |
String url = imgUrl + "api/selectData/readImageView/emailTemplate/" + classId + "/" + newName; | |
ImgUrl imgUrl = new ImgUrl(); | |
imgUrl.setUrl(url); | |
List<ImgUrl> urlList = new ArrayList(); | |
urlList.add(imgUrl); | |
return new ResultImg(, urlList); | |
} | |
/** | |
* 浏览器读取图片 | |
* | |
* @param classId | |
* @param imgName | |
* @param request | |
* @param response | |
*/ | |
public void readImageView(Long classId, String imgName, HttpServletRequest request, HttpServletResponse response) { | |
log.info("----------调用邮箱readImageView方法---------------"); | |
ServletOutputStream outputStream = null; | |
FileInputStream inputStream = null; | |
try { | |
//获取图片存放路径 | |
String imgPath = null; | |
StuEmailPhoto stuEmailPhoto = stuEmailPhotoMapper.getUrlByNameAndClassId(classId, imgName); | |
imgName = stuEmailPhoto.getImgName(); | |
String suffix = imgName.substring(imgName.lastIndexOf(".") +); | |
// StuPlatTransfer transfer = transferMapper.getImageUrlByName(java.net.URLDecoder.decode(imgName, "utf-") ); | |
log.info(JsonHelper.toJsonString(stuEmailPhoto)); | |
imgPath = stuEmailPhoto.getImgUrl(); | |
if (null != imgPath) { | |
File imgFile = new File(imgPath); | |
if (!imgFile.exists()) { | |
return; | |
} | |
// response.setContentType("application/octet-stream; charset=utf-"); | |
response.addHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); | |
response.addHeader("Access-Control-Expose-Headers", "token,uid,Content-Disposition"); | |
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); | |
response.addHeader("Access-Control-Allow-Headers", "Content-Type"); | |
response.addHeader("Access-Control-Allow-Credentials", "true"); | |
response.addHeader("Content-Length", "" + imgFile.length()); | |
response.setHeader("Pragma", "no-cache"); | |
response.setHeader("Cache-Control", "no-cache"); | |
response.setDateHeader("Expires",); | |
inputStream = new FileInputStream(imgFile); | |
response.setContentType("image/" + suffix + ";charset=utf-"); | |
outputStream = response.getOutputStream(); | |
//读取文件流 | |
int len =; | |
byte[] buffer = new byte[ * 10]; | |
while ((len = inputStream.read(buffer)) != -) { | |
outputStream.write(buffer,, len); | |
} | |
outputStream.flush(); | |
} | |
} catch (Exception e) { | |
log.error("-----readImageView---imageName--" + imgName + "--err:" + e); | |
} finally { | |
try { | |
if (outputStream != null) { | |
outputStream.close(); | |
} | |
} catch (IOException e) { | |
log.error("-----readImageView---input close--" + imgName + "--e:" + e); | |
} | |
try { | |
if (inputStream != null) { | |
inputStream.close(); | |
} | |
} catch (IOException e) { | |
log.error("-----readImageView---out close--" + imgName + "--e:" + e); | |
} | |
} | |
} | |
} |
springboot上传文件两种方式
1.文件保存在服务器,url地址保存在数据库
/** | |
*.文件保存在服务器,url地址保存在数据库 | |
* 上传成功之后返回成功保存的url地址 | |
*/ | |
@PostMapping("/upload") | |
public @ResponseBody String upload(@RequestParam MultipartFile file, HttpServletRequest request){ | |
if(!file.isEmpty()){ | |
String uploadPath = "C:\uploadFile"; | |
// 如果目录不存在则创建 | |
File uploadDir = new File(uploadPath); | |
if (!uploadDir.exists()) { | |
uploadDir.mkdir(); | |
} | |
String OriginalFilename = file.getOriginalFilename();//获取原文件名 | |
String suffixName = OriginalFilename.substring(OriginalFilename.lastIndexOf("."));//获取文件后缀名 | |
//重新随机生成名字 | |
String filename = UUID.randomUUID().toString() +suffixName; | |
File localFile = new File(uploadPath+"\"+filename); | |
try { | |
file.transferTo(localFile); //把上传的文件保存至本地 | |
/** | |
* 这里应该把filename保存到数据库,供前端访问时使用 | |
*/ | |
return filename;//上传成功,返回保存的文件地址 | |
}catch (IOException e){ | |
e.printStackTrace(); | |
System.out.println("上传失败"); | |
return ""; | |
} | |
}else{ | |
System.out.println("文件为空"); | |
return ""; | |
} | |
} | |
2.直接把文件以二进制形式保存到数据库中数据类型为blob的一个字段
/** | |
*上传图片,使用mybatis-plus保存到数据库 | |
*User为实体类,数据库对应user表,有id、image两个属性 | |
*/ | |
public String upload( MultipartFile file)throws Exception{ | |
if(!file.isEmpty()){ | |
User user=new User(); | |
user.setImage(file.getBytes()); | |
userMapper.insert(user); | |
} | |
return "ok"; | |
} | |
/** | |
*前端通过id获取数据库中的图片 | |
*/ | |
public void getImage(String id,HttpServletResponse resp) throws Exception{ | |
User user=userMapper.selectById(id); | |
byte[] image = (byte[])user.getImage(); | |
resp.setContentType("image/jpeg"); | |
ServletOutputStream out = resp.getOutputStream(); | |
out.write(image); | |
out.flush(); | |
out.close(); | |
} |
3.前端代码
<form action="/upload" method="post" enctype="multipart/form-data"> | |
<input type="file" name="file" /><br/> | |
<input type="submit" name="" id="" value="提交" /> | |
</form> |