如何使用spring资源从远程URL读取zip文件?

时间:2015-02-13 11:02:52

标签: java spring

我想使用spring Resource类来使用远程URL inmemory中的zip文件:

UrlResource url = new UrlResource("https://path.to.TheFile.zip");
System.out.println(url.getFile().lastModified()); //=0, so probably it did not work

结果:

Caused by: java.io.FileNotFoundException: https://path.to.TheFile.zip (The syntax for the filename, directory or media is invalid)
    at java.util.zip.ZipFile.open(Native Method) ~[?:1.7.0_51]
    at java.util.zip.ZipFile.<init>(ZipFile.java:215) ~[?:1.7.0_51]
    at java.util.zip.ZipFile.<init>(ZipFile.java:145) ~[?:1.7.0_51]
    at java.util.zip.ZipFile.<init>(ZipFile.java:159) ~[?:1.7.0_51]

这里可能有什么问题?

我无法使用url.getInputStream(),因为我无法将IS传递给ZipFile: ZipFile(url.getInputStream()) //error

1 个答案:

答案 0 :(得分:-1)

根据getFile()&#39; javadoc :(强调我的)

  

此实现返回基础URL / URI的文件引用,,前提是它引用文件系统中的文件

您应该使用getInputStream()代替。然后,您可以将字节数组存储到本地内存数据结构中(例如,使用StreamUtils.copyToByteArray)并对其进行处理(查看How can I convert byte array to ZIP file)。

为了按编辑问题中的建议使用ZipFile,您需要将字节数组写入临时本地文件(提示:File.createTempFileFileCopyUtils.copy()) ,然后直接实例化ZipFile。

请记住在必要时关闭Stream,并在完成后删除临时文件。