我想使用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
答案 0 :(得分:-1)
根据getFile()
&#39; javadoc :(强调我的)
此实现返回基础URL / URI的文件引用,,前提是它引用文件系统中的文件。
您应该使用getInputStream()
代替。然后,您可以将字节数组存储到本地内存数据结构中(例如,使用StreamUtils.copyToByteArray
)并对其进行处理(查看How can I convert byte array to ZIP file)。
为了按编辑问题中的建议使用ZipFile
,您需要将字节数组写入临时本地文件(提示:File.createTempFile和FileCopyUtils.copy()
) ,然后直接实例化ZipFile。
请记住在必要时关闭Stream,并在完成后删除临时文件。