一、接收前端图片并保存并为前端返回一个图片路径.

 


@RestController
@RequestMapping("/upload")
public class UploadImgController {

    @Autowired(required = false)
    private ResourceLoader resourceLoader;

    @Value(value = "/Users/user/Java/Upload/ServerPro")
    private String uploadPath;


    /**
     * 时间格式化
     */
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd/");

    @PostMapping("/uploadImg")
    public Result uploadFile(@RequestParam("file") MultipartFile multipartFile) {
        try {
            if (multipartFile.isEmpty()) {
                return Result.error("文件为空,请重新选择!");
            }
            // 上传的图片全部保存在 "/Users/fangjinliang/Java/Upload/MyManagerPro/uploadImg/" 目录下
            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.123.png,经过处理后得到:avatar.123_1661136943533.png
                fileName = prefixName + "_" + System.currentTimeMillis() + suffixName;
            } else {
                // 上传的图片没有后缀(这压根就不算是一个正常的图片吧?)
                return Result.error("上传图片格式错误,请重新选择!");
            }
            String savePath = file.getPath() + File.separator + fileName;
            File saveFile = new File(savePath);
            // 将上传的文件复制到指定目录
            FileCopyUtils.copy(multipartFile.getBytes(), saveFile);            // 返回给前端的图片保存路径;前台可以根据返回的路径拼接完整地址,即可在浏览器上预览该图片
            String path = "upload" + File.separator + fileName;
            if (path.contains("\\")) {
                path = path.replace("\\", "/");
            }
            return Result.ok().put("data",path);
        } catch (IOException e) {
            return Result.error(e.getMessage());
        }
    }
}

二、图片资源路径映射.(Mac 需在本地路径前加file:)

 

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        //其中/images是访问图片资源的前缀,比如要访问test1.png。则全路径为:http://localhost:端口号/images/test1.png
        registry.addResourceHandler("/upload/**")
                .addResourceLocations("file:/Users/user/Java/Upload/ServerPro/");//此处为设置服务端存储图片的路径(前段上传到后台的图片保存位置)
    }
}

 

三、访问图片

http://localhost:8080/upload/test1.png

 

 

 

posted on 2024-10-23 22:40  代码少年_夕阳  阅读(183)  评论(0编辑  收藏  举报