public class FileUtil { public static byte[] FileToByte(File file) throws IOException { // 将数据转为流 @SuppressWarnings("resource") InputStream content = new FileInputStream(file); ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[100]; int rc = 0; while ((rc = content.read(buff, 0, 100)) > 0) { swapStream.write(buff, 0, rc); } // 获得二进制数组 return swapStream.toByteArray(); } }
时间: 2024-01-22 18:01:50 浏览: 124
这是一个 Java 类 FileUtil,其中定义了一个静态方法 FileToByte,用于将给定的文件转换为 byte 数组。该方法的实现过程是:首先将文件内容读取到一个 InputStream 流中,然后使用 ByteArrayOutputStream 将 InputStream 流中的数据转换成二进制数组并返回。
具体的实现过程是:先创建一个 InputStream 对象,将 file 文件的内容读取到该对象中。然后创建一个 ByteArrayOutputStream 对象,将 InputStream 流中的数据写入到它里面,最后调用 toByteArray() 方法将 ByteArrayOutputStream 对象中的数据转换成 byte 数组并返回。
需要注意的是,该方法可能会抛出 IOException 异常,因此在调用该方法时需要进行异常处理。
相关问题
@GetMapping("/{fileUUID}") public void download(@PathVariable String fileUUID, HttpServletResponse response) throws IOException { // 根据文件的唯一标识码获取文件 File uploadFile = new File(FILE_UPLOAD_PATH + fileUUID); // 设置输出流的格式 ServletOutputStream os = response.getOutputStream(); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileUUID, "UTF-8")); response.setContentType("application/octet-stream"); // 读取文件的字节流 try { os.write(FileUtil.readBytes(uploadFile)); } catch (Exception e) { System.err.println("文件下载失败,文件不存在"); } os.flush(); os.close(); }
这段代码是一个 Spring Boot 的 RestController,用于提供文件下载服务。通过 @GetMapping("/{fileUUID}") 指定了 GET 方法的请求路径,其中的 {fileUUID} 是一个占位符,表示请求路径中的一个参数。在方法体内,首先根据文件的唯一标识码获取文件,然后设置输出流的格式,包括文件名和响应类型。最后通过输出流将文件的字节流写入响应体中,实现文件下载功能。需要注意的是,这里使用了 try-catch 语句来捕获文件读取异常,并在控制台输出错误信息。
@PostMapping("/uploadImg") public Object uploadImg(@RequestParam MultipartFile file) throws IOException { String originalFilename = file.getOriginalFilename(); String type = FileUtil.extName(originalFilename); long size = file.getSize(); // 定义一个文件唯一的标识码 String fileUUID = IdUtil.fastSimpleUUID() + StrUtil.DOT + type; File uploadFile = new File(FILE_UPLOAD_PATH + fileUUID); // 判断配置的文件目录是否存在,若不存在则创建一个新的文件目录 File parentFile = uploadFile.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } String url; // 获取文件的md5 String md5 = SecureUtil.md5(file.getInputStream()); // 从数据库查询是否存在相同的记录 Files dbFiles = getFileByMd5(md5); if (dbFiles != null) { url = dbFiles.getUrl(); } else { // 上传文件到磁盘 file.transferTo(uploadFile); // 数据库若不存在重复文件,则不删除刚才上传的文件 url = "http://localhost:9090/file/" + fileUUID; } // 存储数据库 Files saveFile = new Files(); saveFile.setName(originalFilename); saveFile.setType(type); saveFile.setSize(size / 1024); // 单位 kb saveFile.setUrl(url); saveFile.setMd5(md5); fileMapper.insert(saveFile); Map<String, Object> map = new HashMap<>(); map.put("errno", 0); map.put("data", JSONUtil.parseArray("[{\"url\": \"" + url + "\"}]")); return map; }
这段代码是一个用于文件上传的接口,使用了Spring的@PostMapping注解。当请求到达该接口时,会从请求中获取上传的文件,并将其存储到本地磁盘上指定的目录中。如果该文件已经存在于数据库中,则会返回该文件对应的URL,否则会将其记录在数据库中,并返回该文件的URL。最后,将结果封装成一个Map对象返回给调用方。
阅读全文