Java实现文件(图片)的上传下载与删除

先创建一个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

上传图片
上传格式错误的图片
下载图片
删除图片

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

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Java Spring Boot中实现文件上传和下载功能,可以按照以下步骤进行操作: 1. 首先,在项目的pom.xml文件中添加web依赖,如下所示: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2. 创建一个HTML文件,用于实现文件上传和下载的前端页面。 3. 在Spring Boot中,可以通过创建一个Controller来处理文件上传和下载的请求。在Controller中,可以使用`@PostMapping`注解来处理文件上传请求,并使用`@GetMapping`注解来处理文件下载请求。在处理文件上传请求时,可以使用`MultipartFile`类型的参数来接收上传的文件。在处理文件下载请求时,可以使用`ResponseEntity`类型的返回值来返回文件给客户端。 4. 在Controller中,可以使用`File`类或`Path`类来处理文件的读取、写入和删除等操作。可以使用`Files`类提供的方法来实现文件的复制、移动和重命名等操作。 5. 在处理文件上传和下载时,需要注意安全性和文件大小的限制。可以使用`@RequestParam`注解来限制文件的大小,并使用`@Valid`注解来验证文件的合法性。 通过以上步骤,您就可以在Java Spring Boot中实现文件上传和下载功能了。希望以上信息对您有所帮助。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [java SpringBoot文件上传,](https://blog.csdn.net/qingqingyyds/article/details/126614747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SpringBoot 如何实现文件上传和下载](https://blog.csdn.net/yujun2023/article/details/130905253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CVPlayer-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值