SpringBoot上传图片到本地并在线预览

时间:2025-03-28 16:14:27
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.FileCopyUtils; 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 java.io.File; import java.io.IOException; @Slf4j @RestController @RequestMapping("/image") public class ImageUploadController { @Value(value = "${}") private String uploadPath; /** * 上传图片并预览 */ @RequestMapping(value = "/upload", method = RequestMethod.POST) public String uploadImage(@RequestParam(value = "file") MultipartFile multipartFile) { try { if (multipartFile.isEmpty()) { return "文件为空,请重新选择!"; } // 上传的图片全部保存在 "E://upload//avatar//" 目录下 File file = new File(uploadPath); if (!file.exists()) { // 创建完整的目录 file.mkdirs(); } // 获取文件原始名(包含后缀名) String orgName = multipartFile.getOriginalFilename(); // 获取文件名(不包括后缀) String prefixName = orgName.substring(0, orgName.lastIndexOf(".")); // 获取文件后缀名 String suffixName = orgName.substring(orgName.lastIndexOf(".")); // 这是处理后的新文件名 String fileName; if(orgName.contains(".")) { // 示例:avatar.,经过处理后得到:avatar.123_1661136943533.png fileName = prefixName + "_" + System.currentTimeMillis() + suffixName; } else { // 上传的图片没有后缀(这压根就不算是一个正常的图片吧?) return "上传图片格式错误,请重新选择!"; } String savePath = file.getPath() + File.separator + fileName; File saveFile = new File(savePath); // 将上传的文件复制到指定目录 FileCopyUtils.copy(multipartFile.getBytes(), saveFile); // 返回给前端的图片保存路径;前台可以根据返回的路径拼接完整地址,即可在浏览器上预览该图片 String path = "upload/avatar" + File.separator + fileName; if (path.contains("\\")) { path = path.replace("\\", "/"); } return path; } catch (IOException e) { log.error(e.getMessage(), e); } return ""; } }