文件上传

实现策略

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

文件上传前台

   <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";
    }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐