fileUploadAndDownload

Spring完成文件的存储和下载 文件的存储 - 使用数据库存储文件本体 - 使用数据库存储文件的位置,文件存储在文件系统上 使用数据库直接存储文件,使用LONGBLOB类型保存文件的Byte数据 文件的接收 前端使用form上传数据 ContentType : multipart/form-data 使用 @RequestPart 注解接收文件 文件的下载 - 文件存储于数据库 使用Jdbc获取文件的LONGBLO…

Spring完成文件的存储和下载

文件的存储

  • 使用数据库存储文件本体
  • 使用数据库存储文件的位置,文件存储在文件系统上

使用数据库直接存储文件,使用LONGBLOB类型保存文件的Byte数据

文件的接收

前端使用form上传数据

ContentType : multipart/form-data 使用 @RequestPart 注解接收文件

    @PostMapping("/upload")
    public ResponseEntity<Object> uploadFile(@RequestPart MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        fileName = fileName.substring(0, fileName.lastIndexOf("."));
        fileMapper.uploadFile(fileName, suffix, file.getBytes());
        return new ResponseEntity(HttpStatusCode.valueOf(200));
    }

文件的下载

  • 文件存储于数据库

使用Jdbc获取文件的LONGBLOB,在Java中使用byte[]数组接收数据

    @GetMapping("/download/{filename}")
    public void downloadFile(@PathVariable() String filename, HttpServletResponse response) throws IOException {
        filename = filename.substring(0, filename.lastIndexOf(".") == -1 ? filename.length() : filename.lastIndexOf("."));
        File file = jdbcTemplate.queryForObject("SELECT * FROM FileStorage WHERE file_name = ?", new Object[]{filename},
                (resultSet, rowNum) -> {
                    File tfile = new File();
                    tfile.setFileId(resultSet.getInt("file_id"));
                    tfile.setFileName(resultSet.getString("file_name"));
                    tfile.setFileType(resultSet.getString("file_type"));
                    tfile.setFileData(resultSet.getBytes("file_data"));
                    return tfile;
                }
        );

        byte[] fileData = file.getFileData();

        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=\"file"+file.getFileType()+"\"");

        if(fileData != null){
            ServletOutputStream stream = response.getOutputStream();
            stream.write(fileData);
            stream.flush();
        }
    }