业务需求:
我们在用springBoot框架开发,有时候会上传图片和读取图片,那么我们,需要用multipartFile接口来上传图片,用multipartFile上传时会有限制,最大为1M因此我们需要对上传的大小进行设置,设置文件大小的逻辑在下面代码中
上传图片
/**
* @parma key 对应数据库的key值
* @parma value 对应数据库的value值
* @parma file上传图片的接口
* @parma creator上传人
*
* 上传图片到指定的路径并把路径存入数据库方便以后读取
*/
@Override
public ResponseModel updateConfig(String key, String value, MultipartFile file, String creator, int valueType) {
try {
if (valueType != 0) {
OutputStream os = null;
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
String path = "F:\\Image";
// 2、保存到临时文件
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流保存到本地文件
File tempFile = new File(path);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
os = new FileOutputStream(tempFile.getPath() + File.separator + fileName);
// 开始读取
while ((len = inputStream.read(bs)) != -1) {
os.write(bs, 0, len);
}
//获取上传图片的路径
value = tempFile.getPath() + File.separator + fileName;
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 完毕,关闭所有链接
os.close();
inputStream.close();
}
}
//把对应的数据存入数据库
int i = tSpecialConfigMapper.updateConfig(value, creator, key);
if (i > 0) {
return ResponseModel.ok("修改成功");
} else {
return ResponseModel.ok("修改失败");
}
} catch (Exception e) {
return ResponseModel.error(e.getMessage(), e);
}
}
读取图片
/**
* @parma fileUrl读取文件的路径
*/
@Override
public void readFile(HttpServletResponse response, String fileUrl) throws IOException {
try {
File file = new File(fileUrl);
if (! file.exists()){
response.sendError(404,"找不到文件");
}else {
FileInputStream in = new FileInputStream(file);
byte[] buf = new byte[in.available()];
in.read(buf);
response.setContentType("image/jpg");
OutputStream toClient = response.getOutputStream();
toClient.write(buf);
toClient.flush();
toClient.close();
in.close();
}
} catch (Exception e) {
response.sendError(500,e.getMessage());
}
}
设置图片大小
/**
* 此方法放在启动类下即可,根据具体的业务逻辑可自行设置
*/
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
//factory.setMaxFileSize(DataSize.ofMegabytes(80)); //MB
//factory.setMaxFileSize(DataSize.ofKilobytes(80)); //KB
factory.setMaxFileSize(DataSize.ofGigabytes(5)); //Gb
/// 设置总上传数据总大小
//factory.setMaxRequestSize(DataSize.ofKilobytes(100)); //KB
factory.setMaxRequestSize(DataSize.ofMegabytes(100)); //MB
//factory.setMaxRequestSize(DataSize.ofGigabytes(100)); //Gb
return factory.createMultipartConfig();
}