当前位置: 首页 > 知识库问答 >
问题:

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

楚修为
2023-03-14

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

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

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

因此,基本上用户将击中我的API,上传文件,作为回应,他将获得在那个压缩文件中存在的数据。

@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);
}

共有1个答案

施敏达
2023-03-14

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

java prettyprint-override">ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(file.getBytes()));
 类似资料:
  • 下面的代码在内存中创建了一个文件。 我想把那个pdf文件保存在磁盘上以便查看。我将如何在python中实现它?

  • 我正在Windows服务器上使用C#处理存储在IIS服务器上的web应用程序。 null

  • 我有一个方法,在. txt或. docx文件的代码的不同部分接收来自的。我想创建一个新的对象,从以后读取内容的字节,而不保存该文件到磁盘。这有可能吗?或者有更好的方法从文件字节中获取内容?

  • 这里我有一个判决, 我想做的是将字典保存到一个json文件中。 我现在做的是将dict1保存到一个真正的json文件中,并使用flask send_from_directory返回该文件。如何避免将dict1保存到磁盘?

  • 问题内容: 我从SUN网站(http://java.sun.com/developer/technicalArticles/Programming/compression/)找到了示例,但是它返回BufferedOutputStream。但是我想将ZipEntry文件作为InputStream,然后处理下一个文件。那可能吗?我的程序无法访问硬盘,因此它甚至无法临时保存文件。 问题答案: 好吧,只需

  • 我目前正在做一个小程序,从磁盘读取png文件,做一些修改,并保存回来。除了一个小问题外,一切都运行得很顺利,在我将文件保存回磁盘后,它的大小总是增加,例如,27.1MB的文件会变成33.3MB。 如何在不改变图像大小的情况下读取和保存图像?

  • 问题内容: 我需要在zip文件中读取单个文件“ test.txt”的内容。整个zip文件是一个非常大的文件(2gb),其中包含很多文件(10,000,000),因此,提取整个文件对我而言不是可行的解决方案。如何读取单个文件? 问题答案: 尝试使用包装器: 您也可以使用:

  • 我有一个zip文件(在一个jar文件中),我想读取init。我知道我可以使用getResourceAsStream(…)轻松读取txt文件,避免“URI不分层”错误。但现在确定我该如何为zip文件做到这一点。 下面是我的代码,但当我将代码导出到runnable jar并运行它时,它会抛出“URI非层次错误”。