项目1总结其三(图片上传功能)

1、UploadService

java 复制代码
public interface UploadService {
    //上传图片
    String uploadImage(MultipartFile file, String type);
}

upload.location = D:/upload

java 复制代码
@Value("${upload.location}")
    private String uploadLocation;//文件上传路径

    @Override
    public String uploadImage(MultipartFile file, String type) {
        //1.创建目录
        File dir = new File(uploadLocation + "/images/" + type);
        if (!dir.exists()) {
            boolean b = dir.mkdirs();//级联创建目录
            if (!b) {
                throw new F1Exception("级联创建目录异常");
            }
        }
        //2.给上传的文件起名
        LocalDateTime now = LocalDateTime.now();
        String fileName = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
        Random random = new Random();
        int sid = random.nextInt(1000);//0~999
        fileName = fileName + "-" + sid;

        //3.拼扩展名
        String originalFileName = file.getOriginalFilename();//上传文件名
        //assert originalFileName != null;
        int idx = originalFileName.lastIndexOf(".");
        String ext = originalFileName.substring(idx);
        fileName = fileName + ext;

        //完整的文件名
        String fullName = dir.getAbsolutePath() + "/" + fileName;

        //要存储的目标文件
        File target = new File(fullName);

        //4.存储文件
        try {
            file.transferTo(target);
        } catch (IOException e) {
            throw new RuntimeException("保存文件失败");
        }

        //5.返回访问地址和存储地址
        return "/images/" + type + "/" + fileName;
    }


修正:图片中的回显操作并非通过interceptor,而是通过资源定位实现的

后记:这里的D:/upload完全可以用@Value注入

思路就是:

通过组件的action操作---后端api调用service操作---保存文件---前端回显访问baseUrl + /image/xxx这个链接 --- 后端通过资源定位,将该链接定位到存放资源的位置

相关推荐
小程序设计15 小时前
【springboot+vue】高校迎新平台管理系统(源码+文档+调试+基础修改+答疑)
vue.js·spring boot·后端
波波烤鸭16 小时前
Spring Boot 原理与性能优化实战
spring boot·后端·性能优化
知识分享小能手16 小时前
React学习教程,从入门到精通,React 构造函数(Constructor)完整语法知识点与案例详解(16)
前端·javascript·学习·react.js·架构·前端框架·vue
AppleWebCoder16 小时前
Java大厂面试实录:AIGC与虚拟互动场景下的微服务与AI落地(附知识详解)
java·spring boot·微服务·ai·消息队列·aigc·虚拟互动
齐 飞17 小时前
Spring Cloud Alibaba快速入门03-OpenFeign进阶用法
spring boot·后端·spring cloud
阿洛学长19 小时前
Visual Studio下载安装教程及其旧版本
ide·visual studio
ss27319 小时前
基于Springboot + vue实现的高校大学生竞赛项目管理系统
vue.js·spring boot·后端
托比-马奎尔19 小时前
初识SpringBoot
java·spring boot·后端
孫治AllenSun20 小时前
【Springboot】介绍启动类和启动过程
java·spring boot·后端
海天一色y1 天前
Pycharm(二十一)递归删除文件夹
ide·python·pycharm