SpringBoot上传/获取文件简单实例

59次阅读
没有评论

上传工具类 FileUtil

自行修改上传路径以及包名

package com.ham.nav_lite_backend.utils;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.UUID;

/**
 * @description: 文件工具类 上传/下载
 * @author: ham
 * @date: 2024/9/9 11:22
 */
@Component
public class FileUtil {


    /**
     * 上传文件
     *
     * @param file MultipartFile 文件对象
     * @throws IOException 如果上传过程中出现错误抛出异常
     */
    public void uploadFile(MultipartFile file) throws IOException {
        // 上传路径
        String uploadDir = "E:\\Users\\ham\\Downloads\\uploads\\";

        // 获取当前日期路径 (年/月/日)
        String datePath = LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd"));

        // 拼接上传路径和日期路径
        String fullUploadDir = Paths.get(uploadDir, datePath).toString();

        // 创建日期目录(如果不存在)
        File dir = new File(fullUploadDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        // 生成唯一的文件名
        String originalFilename = file.getOriginalFilename();
        String fileExtension = getFileExtension(originalFilename);
        String uniqueFileName = UUID.randomUUID().toString() + fileExtension;

        // 文件保存路径
        Path filePath = Paths.get(fullUploadDir, uniqueFileName);

        // 保存文件
        Files.copy(file.getInputStream(), filePath);
    }

    /**
     * 获取文件扩展名
     *
     * @param fileName 文件名
     * @return 文件扩展名,带点,如 ".jpg"
     */
    private String getFileExtension(String fileName) {
        int dotIndex = fileName.lastIndexOf('.');
        return (dotIndex == -1) ? "" : fileName.substring(dotIndex);
    }
}

上传文件控制层 FileController

自行修改包名

package com.ham.nav_lite_backend.controller;

import com.ham.nav_lite_backend.utils.FileUtil;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @description:
 * @author: ham
 * @date: 2024/9/9 15:06
 */
@RestController
@RequestMapping("/files")
public class FileController {
    @Resource
    private FileUtil fileUtil;

    /**
     * @param file:
     * @return java.lang.Boolean
     * @description: 上传文件
     * @author: ham
     * @date: 2024/9/10 11:10
     **/
    @PostMapping
    public Boolean uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            fileUtil.saveFile(file);
            return true;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

静态资源映射配置 WebMvcConfig (配置后可以按照上传路径拼接后端地址访问文件)

自行修改上传路径以及包名

package com.ham.nav_lite_backend.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @description: 静态资源配置类,根据配置文件中的路径动态映射上传目录
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        String uploadDir = "E:\\Users\\ham\\Downloads\\uploads\\"; // 上传路径

        // 动态映射上传目录到 /attachments/** 路径
        registry.addResourceHandler("/attachments/**")
                .addResourceLocations("file:" + uploadDir);
    }
}

请求示例

SpringBoot上传/获取文件简单实例

正文完
 2
评论(没有评论)
验证码