SpringBoot中实现文件的上传和下载

导读:本篇文章讲解 SpringBoot中实现文件的上传和下载,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

文件上传

实现策略

​ 将文件上传到指定路径,并将文件的路径信息存储到数据库中

文件上传前台

   <form  th:action="@{/file/upload}" method="post" enctype="multipart/form-data">
                        文件上传:<input  class="layui-btn" type="file" name="file" />
                        <input type="submit" value="提交" />
                    </form>

界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FwWFHtAW-1654847887100)(C:\Users\Leo\AppData\Roaming\Typora\typora-user-images\1654847488829.png)]

后台

    //文件上传
    @PostMapping("/file/upload")
    public String file(MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());//文件名
        System.out.println(file.getContentType());//文件类型
        System.out.println(file.getSize());//文件大小
        System.out.println(file.getInputStream());//文件的输入流

        //获得文件上传的路径
        String path = ResourceUtils.getURL("classpath:").getPath()+"/static/files";

        System.out.println(path);
        java.io.File newFile=new java.io.File(path);//由于自定义的实体类和java.io.File重名
        //文件夹不存在则重建
        if(!newFile.exists()){
            newFile.mkdirs();
        }
        //上传
        String fileName=file.getOriginalFilename();
        file.transferTo(new java.io.File(newFile,fileName));
        //将文件上传的url存入数据表中
        System.out.println("文件上传成功");
        Date date = new Date();
        Timestamp time = new Timestamp(date.getTime());//mysql中的日期格式
        File file1=new File(fileName,path,time);
        fileService.addFile(file1);//调用service方法 将文件信息插入数据库

        return "redirect:/file";
    }

可以在配置文件中对上传文件的大小等进行限制

文件下载

后台

 //文件的下载
    @GetMapping("/file/download/{fileId}")
    public String fileDownload(@PathVariable("fileId") int fileId, HttpServletResponse response) throws IOException {
        File file = fileService.queryFileById(fileId);
        // 获得待下载文件所在文件夹的绝对路径
        String realPath =file.getUrl();
        //获得输入流
        FileInputStream inputStream = new FileInputStream(new java.io.File(realPath, file.getFileName()));
        // 设置响应头、以附件形式打开文件
        response.setHeader("content-disposition", "attachment; fileName=" + file.getFileName());
        //获得输出流对象
        ServletOutputStream outputStream = response.getOutputStream();
        int len = 0;
        byte[] data = new byte[1024];
        while ((len = inputStream.read(data)) != -1) {
            outputStream.write(data, 0, len);
        }
        outputStream.close();
        inputStream.close();
        return "redirect:/file";
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107592.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!