SpringBoot上传文件路径问题

问题描述:

在开发一个springboot的项目时,在项目部署的时候遇到一个问题:
就是我将项目导出为jar包,然后用java -jar 运行时,
项目中文件上传的功能无法正常运行,其中获取到存放文件的目录的绝对路径的值为空,文件无法上传

问题解决:

//            使用ResourceUtils  来获取真实路径  确保部署时不会出错
            File path = new File(ResourceUtils.getURL("classpath:").getPath());
            System.out.println(path.getAbsolutePath());
//          如果上传的文件为/static/successImage/content/  如下
            File upload = new File(path.getAbsolutePath(), "static/successImage/content/");
            if (!upload.exists()) upload.mkdirs();
            String uploadPath = upload + "\\";
            file.transferTo(new File( uploadPath+fileName));

配置文件需要加入:


#设置静态资源路径,多个以逗号分隔
resources:
    static-locations: classpath:static/,file:${spring.servlet.multipart.location}

具体项目实战:

控制层:

/**
     * 保存新闻内容中的图片,
     *
     * @param file    新闻内容中的图片
     * @param request
     * @return
     */
    @RequestMapping("/admin/saveContentImg")
    @ResponseBody
    public JSONObject saveImage(@RequestParam("editormd-image-file") MultipartFile file, HttpServletRequest request) {
        JSONObject jsonObject = new JSONObject();
        ResultInfo resultInfo = articleService.saveArticleImage(file, request);
        if (resultInfo.getResultCode() == 0) {
            //图片上传失败的信息码
            jsonObject.put("success", 0);
            //信息
            jsonObject.put("message", "upload error!");
        } else {
            //图片回显地址,即文件存放地址,应为虚拟路径
            jsonObject.put("url", resultInfo.getResultObj());
            //图片上传成功的信息码
            jsonObject.put("success", 1);
            //信息
            jsonObject.put("message", "upload success!");
        }
        return jsonObject;
    }

实现层:

/**
     * 保存照片的路径
     *
     * @param file
     * @param request
     * @return
     */
    @Override
    public ResultInfo saveArticleImage(MultipartFile file, HttpServletRequest request) {
        ResultInfo resultInfo = new ResultInfo();
        try {
            int l = file.getOriginalFilename().lastIndexOf(".");
            String h = file.getOriginalFilename().substring(l + 1);
            String fileName = UUIDUtils.getUUID() + "." + h;
            System.out.println(fileName);
//            使用ResourceUtils  来获取真实路径  确保部署时不会出错
            File path = new File(ResourceUtils.getURL("classpath:").getPath());
            System.out.println(path.getAbsolutePath());
            File upload = new File(path.getAbsolutePath(), "static/successImage/content/");
            if (!upload.exists()) upload.mkdirs();
            String uploadPath = upload + "\\";
            file.transferTo(new File( uploadPath+fileName));
            resultInfo.setResultObj("/static/successImage/content/"+fileName);
            resultInfo.setResultCode(ResultInfo.RESULT_CODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            resultInfo.setResultCode(ResultInfo.RESULT_CODE_ERROR);
        }
        return resultInfo;
    }

 

在Spring Boot中,可以使用MultipartHttpServletRequest来处理文件上传,然后将文件路径存储在数据库中。以下是一个简单的示例代码: 1. 添加依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 2. 创建一个实体类 创建一个实体类,用来表示上传的文件信息,包括文件名、文件类型、文件大小、文件路径等信息。 ``` @Entity @Table(name = "file") public class FileEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "file_name") private String fileName; @Column(name = "file_type") private String fileType; @Column(name = "file_size") private Long fileSize; @Column(name = "file_path") private String filePath; // getter and setter methods } ``` 3. 创建一个文件上传控制器 创建一个文件上传控制器,用来处理文件上传请求,并将文件信息存储到数据库中。 ``` @RestController public class FileController { @Autowired private FileRepository fileRepository; @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { try { // 获取上传文件的信息 String fileName = file.getOriginalFilename(); String fileType = file.getContentType(); Long fileSize = file.getSize(); // 保存文件到本地磁盘 String filePath = "D:/upload/" + fileName; File dest = new File(filePath); file.transferTo(dest); // 将文件信息存储到数据库中 FileEntity fileEntity = new FileEntity(); fileEntity.setFileName(fileName); fileEntity.setFileType(fileType); fileEntity.setFileSize(fileSize); fileEntity.setFilePath(filePath); fileRepository.save(fileEntity); return "上传成功"; } catch (Exception e) { e.printStackTrace(); return "上传失败"; } } } ``` 4. 创建一个文件存储库 创建一个文件存储库,用来操作数据库中的文件信息。 ``` public interface FileRepository extends JpaRepository<FileEntity, Long> { } ``` 这样,当用户上传文件时,文件信息将被存储到数据库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值