SpringBoot文件上传功能

朋友圈发布、头像更改等等都属于文件上传。SpringBoot为此提供了相关功能:MultipartFile。

1.文件上传处理器

根目录新建common包,该包下新建Constants.java类,该类存储常量,在该类中添加上传的文件存储路径,路径自由选择。

//文件上传保存路径

public final static String FILE_UPLOAD_PATH ="D:\\Projects\\uploadfile\\";

根目录新建controller包,该包下新建文件上传接收处理器UploadFileController.java

@Controller

public class UploadFileController {

    @RequestMapping("/uploadfile")

    @ResponseBody

    public String upload_file(@RequestParam("file")MultipartFile file){

        if(file.isEmpty()){

            return "上传失败";

        }

        String filename = file.getOriginalFilename();

        String suffixName = filename.substring(filename.lastIndexOf("."));

        //文件保存名字 : 当前时间加随机数

        SimpleDateFormat format =new SimpleDateFormat("yyyyMMdd_HHmmss");

        Random random =new Random();

        StringBuilder tempName =new StringBuilder();

        tempName.append(format.format(new         Date())).append(random.nextInt(100)).append(suffixName);

        String newFileName = tempName.toString();

        try {

            byte[] bytes = file.getBytes();

            Path path = Paths.get(Constants.FILE_UPLOAD_PATH+newFileName);

            Files.write(path,bytes);

        }catch (IOException e) {

            e.printStackTrace();

            return "上传失败";

        }

        return "上传成功";

    }

}

2.前端页面

resources资源文件下的static包下新建upload_file.html,我们简单实现一下前端。

文件上传

运行项目,然后打开浏览器访问该html:  localhost:8080/upload_file.html


   选择一个文件点击上传,然后查看服务端是否成功,路径下是否已经存在上传的文件。默认上传文件大小限制为1MB,如果想要更大,则可以配置,编辑application.properties文件,添加如下

#默认1MB

spring.servlet.multipart.max-file-size=20MB

#默认10MB

spring.servlet.multipart.max-request-size=20MB

3.访问上传的资源文件

前面我们完成了上传文件功能,那么我们仅仅上传,但是大多数情况下我们还要能够访问该资源文件。

根目录下新建config包,该包下新建MyWebMvcConfigurer.java,该类实现WebMvcConfigurer接口,在此我们要映射资源文件。

打开前面建立的Constants类,我们添加文件访问路径,

public final static StringFILE_ACCESS_PATH ="/uploadfile/";

这样我们访问localhost:8080/uploadfile/文件名字   浏览器就能获得该资源文件

Constants类内容如下


public class Constants {

    //文件上传保存路径

    public final static StringFILE_UPLOAD_PATH ="D:\\Projects\\uploadfile\\";

    //文件访问路径

    public final static StringFILE_ACCESS_PATH ="/uploadfile/";

}

MyWebMvcConfigurer实现如下

@Configuration

public class MyWebMvcConfigurerimplements WebMvcConfigurer {

/**

    * 所有以uploadfile开头的静态资源请求  都会映射到Constants.FILE_UPLOAD_PATH目录

    * @param registry

    */

    @Override

    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler(Constants.FILE_ACCESS_PATH+"**").addResourceLocations("file:"+ Constants.FILE_UPLOAD_PATH);

}

}

我们现在上传一个文件,在这上传一张图片,


我们现在访问该文件,浏览器访问 localhost:8080/uploadfile/20200225_22201975.JPG


如果访问的是视频,那么浏览器会自动播放,其他的比如一个zip文件或者安装包什么的访问后浏览器会默认自动下载。

你可能感兴趣的:(SpringBoot文件上传功能)