先创建一个MultipartFileConfig类,设置MultipartFile工具类配置信息

通过MultipartFile工具类来实现文件的上传下载与删除,MultipartFile是Spring框架提供简化上传操作的一个工具类

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;

import javax.servlet.MultipartFileConfigElement;

/**
 * MultipartFile配置
 */
@Configuration
public class MultipartFileConfig {

    @Bean
    public MultipartConfigElement getMultipartConfig() {
        MultipartConfigFactory config = new MultipartConfigFactory();
        config.setMaxRequestSize(DataSize.parse("10MB"));//单次上传的单个文件大小上限(默认1MB)
        config.setMaxRequestSize(DataSize.parse("100MB"));//单次上传的多个文件总大小上限
        //上面两个最好配置一下,下面两个看个人喜好
//        config.setFileSizeThreshold(DataSize.parse("10MB"));//临时目录中文件大小大于指定值则将数据写入硬盘
//        config.setLocation("/");//保存文件临时目录
        return config.createMultipartConfig();
    }

}

文件的上传下载与删除方法实现

方法中用到了自动关闭io流(Java7及以上才支持)

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;

/**
 * 文件上传,下载和删除
 */
public class MultipartFileHandler {

    //配置文件保存路径(可以修改成任意路径,看个人喜好)
    private static final String basePath = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\";

    /**
     * 上传文件
     * @param file 文件
     * @param customSuffix 自定义文件后缀
     * @return  成功则返回文件名
     */
    public static String uploadFile(MultipartFile file,String customSuffix){
        if(file.isEmpty()) {
            return "文件为空";
        }else if(file.getSize() > 1024*1024*10){
            return "文件大于10M";
        }
        //判断是否应该创建保存文件的目录
        File dir = new File(basePath);
        if(!dir.exists()){
            dir.mkdirs();
        }
        //生成新文件名(避免出现重复的文件名导致文件被覆盖)
        String fileName = UUID.randomUUID().toString().replaceAll("-", "") + customSuffix;
        try {
            file.transferTo(new File(basePath + fileName));//保存文件
        }catch (IOException e){
            e.printStackTrace();
            return "上传出错";
        }
        return fileName;
    }

    /**
     * 下载文件
     * @param response
     * @param fileName 文件名
     * @param contentType 响应的HTTP内容类型
     * @return
     */
    public static String downloadFile(HttpServletResponse response,String fileName,String contentType){
        File dir = new File(basePath + fileName);
        //传输文件
        if(dir.exists()){
            try (FileInputStream fileInputStream = new FileInputStream(new File(basePath + fileName));
                 ServletOutputStream outputStream = response.getOutputStream()){

                response.setContentType(contentType);
                int len;
                byte[] bytes = new byte[1024];
                while((len = fileInputStream.read(bytes))!= -1){
                    outputStream.write(bytes,0,len);
                    outputStream.flush();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return "上传成功";
        }else {
            return "文件不存在";
        }
    }

    /**
     * 删除文件
     * @param fileName 文件名
     * @return
     */
    public static String deleteFile(String fileName){
        File dir = new File(basePath + fileName);
        //isFile()判断是否是文件,exists()判断该文件是否存在,delete()删除成功返回1失败则返回0
        if(dir.isFile() && dir.exists() && dir.delete()) {
            return "删除成功";
        }else {
            return "文件不存在";
        }
    }

}

创建一个Controller来调用MultipartFileHandler中的方法

import com.blog.zeroBlog.common.MultipartFileHandler;
import com.blog.zeroBlog.common.Result;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/image")
public class ImageController {

    //上传图片
    @PostMapping("/uploadImage")
    public String uploadImage(@RequestParam("file") MultipartFile file){
        if(file.isEmpty()) { return "文件为空"; }
        //获取文件后缀
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        String[] suffixes = new String[]{//常见图片后缀集合
                ".jpeg",
                ".jpg",
                ".png",
                ".bmp"
        };
        boolean bool = false;
        for(String string : suffixes){//判断后缀是否是常见图片后缀集合中的后缀
            if (string.equals(suffix)){
                bool = true;
            }
        }
        if(bool){
            return MultipartFileHandler.uploadFile(file,".jpg");//(以.jpg格式)保存图片并返回文件名
        }else {
            return "图片格式错误";
        }
    }
    
    //下载图片
    @GetMapping ("/downloadImage")
    public String downloadImage(HttpServletResponse response, @RequestParam("fileName") String fileName){
        String contentType = "image/jpeg";
        MultipartFileHandler.downloadFile(response,fileName,contentType);//下载文件
        return null;
    }
    
    //删除图片
    @PostMapping("/deleteImage")
    public String deleteImage(@RequestParam("fileName") String fileName){
        return MultipartFileHandler.deleteFile(fileName);//删除文件并返回结果
    }

}

功能演示

演示中用到的软件是Apifox

上传图片




java 删除远程的图片 java删除上传的文件_后端


上传格式错误的图片


java 删除远程的图片 java删除上传的文件_spring_02


下载图片


java 删除远程的图片 java删除上传的文件_spring_03


删除图片


java 删除远程的图片 java删除上传的文件_spring_04


*注:文中MultipartFile工具类的调用代码仅支持SpringBoot 3以下,SpringBoot 3及以上的源码改了,所以调用方法和文中不一样,我个人使用的是SpringBoot 2.7.6