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

网友投稿 412 2023-02-15


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的核心代码如下,进行图片的上传和下载:




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

3、spring boot的属性配置:

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

spring:

http:

multipart:

max-file-size: 100Mb #文件上传大小

max-request-size: 200Mb #最打请求大小

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

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

#上传位置

uploadDir: F:\mystudy\pic\


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口测试用例设计方法(接口测试的案例怎么设计的)
下一篇:微信运动开发接口(微信运动接口api)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~