如何读取zip文件而不保存到磁盘与Spring Boot?



关于这个话题已经有很多类似的问题和教程了,但我还没有找到我想做的。

我想制作一个API,虽然我可以上传zip文件,该zip包含xml文件,我正在读取这些文件并发送内容作为响应。

这里唯一的问题是目前我将文件存储在我的项目目录中,但我不希望我想直接读取文件而不将其存储在目录中。

基本上用户会点击我的API,上传文件作为响应,他会得到zip文件中的数据

我代码:

@RequestMapping(value ="/upload", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Object> uploadFile(@RequestParam("file")MultipartFile file) throws IOException {
System.out.println(file.getOriginalFilename());
File converFile = new File("src/main/"+file.getOriginalFilename());
converFile.createNewFile();
FileOutputStream fout = new FileOutputStream(converFile);
fout.write(file.getBytes());
//unzipping file and reading data;
String zipFileName = "src/main/"+file.getOriginalFilename();
List<String> str = new ArrayList<String>();
byte[] buffer = new byte[1024];
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName));
ZipEntry zipEntry;
int read;
while ((zipEntry = zis.getNextEntry())!= null) {
while ((read = zis.read(buffer, 0, 1024)) >= 0) {
str.add(new String(buffer,0,read));
}
}
while (zipEntry != null){
zipEntry = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
System.out.println("Unzip complete");
System.out.println("--------------------------------");
System.out.println("List"+ str);
fout.close();
return new ResponseEntity<>(str, HttpStatus.OK);
}

这段代码可以很好地上传文件,将其保存在项目目录(src/main)中,读取文件数据并将数据作为响应。我怎样才能消除保存部分,只在代码中完成所有这些呢?

您可以使用ByteArrayInputStream代替FileInputStream,如下所示:

ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(file.getBytes()));

最新更新