Spring Boot实现图片上传功能

网友投稿 280 2023-05-12


Spring Boot实现图片上传功能

本文实例为大家分享了Spring Boot图片上传的具体代码,供大家参考,具体内容如下

package com.clou.inteface.domain.web.user;

import java.io.File;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

importhttp:// org.apache.commons.lang3.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.http.MediaType;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.multipart.MultipartFile;

/**

* 文件上传

* @author Fly

*

*/

@RestController

public class FileUpload {

/**

* 用户管理 -> 业务层

*/

@Autowired

private SUserService sUserService;

DkrLptaa

/**

* 文件上传根目录(在Spring的application.yml的配置文件中配置):

* web:

* upload-path: (jar包所在目录)/resources/static/

*/

@Value("${web.upload-path}")

private String webUploadPath;

/**

* ResultVo是一个对象,包含:

* private int errorCode;

* private String errorMsg;

* private Integer total;

* private Object data;

*/

/**

* 基于用户标识的头像上传

* @param file 图片

* @param userId 用户标识

* @return

*/

@PostMapping(value = "/fileUpload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_jsON_VALUE)

public ResultVo fileUpload(@RequestParam("file") MultipartFile file, @RequestParam("userId") Integer userId) {

ResultVo resultVo = new ResultVo();

if (!file.isEmpty()) {

if (file.getContentType().contains("image")) {

try {

String temp = "images" + File.separator + "upload" + File.separator;

// 获取图片的文件名

String fileName = file.getOriginalFilename();

// 获取图片的扩展名

String extensionName = StringUtils.substringAfter(fileName, ".");

// 新的图片文件名 = 获取时间戳+"."图片扩展名

String newFileName = String.valueOf(System.currentTimeMillis()) + "." + extensionName;

// 数据库保存的目录

String datdDirectory = temp.concat(String.valueOf(userId)).concat(File.separator);

// 文件路径

String filePath = webUploadPath.concat(datdDirectory);

File dest = new File(filePath, newFileName);

if (!dest.getParentFile().exists()) {

dest.getParentFile().mkdirs();

}

// 判断是否有旧头像,如果有就先删除旧头像,再上传

SUser userInfo = sUserService.findUserInfo(userId.toString());

if (StringUtils.isNotBlank(userInfo.getUserHead())) {

String oldFilePath = webUploadPath.concat(userInfo.getUserHead());

File oldFile = new File(oldFilePath);

if (oldFile.exists()) {

oldFile.delete();

}

}

// 上传到指定目录

file.transferTo(dest);

// 将图片流转换进行BASE64加码

//BASE64Encoder encoder = new BASE64Encoder();

//String data = encoder.encode(file.getBytes());

// 将反斜杠转换为正斜杠

String data = datdDirectory.replaceAll("\\\\", "/") + newFileName;

Map resultMap = new HashMap<>();

rhttp://esultMap.put("file", data);

resultVo.setData(resultMap);

resultVo.setError(1, "上传成功!");

} catch (IOException e) {

resultVo.setError(0, "上传失败!");

}

} else {

resultVo.setError(0, "上传的文件不是图片类型,请重新上传!");

}

return resultVo;

} else {

resultVo.setError(0, "上传失败,请选择要上传的图片!");

return resultVo;

}

}

}

以上代码需配置SUserService,一个业务层接口;

一个ResultVo对象,属性已给出;

一个基于Spring Boot的 .yml配置文件的配置。

访问图片的时候,需要配置.yml文件

spring:

#配置http访问服务器图片的路径

resources:

static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}

然后基于服务的IP与端口,http//IP:port/resources/static/图片路径(图片名)

更多精彩内容,请点击 《spring上传下载专题》进行深入学习和研究。


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

上一篇:Java多线程的其他知识_动力节点Java学院整理
下一篇:Socket+JDBC+IO实现Java文件上传下载器DEMO详解
相关文章

 发表评论

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