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

标签 java spring

我只想使用内存中远程 URL 的 zip 文件,使用 spring Resource 类:

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())//错误

最佳答案

根据 getFile()javadoc : (强调我的)

This implementation returns a File reference for the underlying URL/URI, provided that it refers to a file in the file system.

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

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

记得在必要时关闭 Stream,并在用完后删除临时文件。

关于java - 如何使用 spring 资源从远程 URL 读取 zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28498139/

相关文章:

java - 当达到阈值时,LinkedHashMap 是否也会treeifyBin/treefybucket?

java - 分隔多个登录 Web 用户之间的变量值

java - 获取 HibernateException : The internal connection pool has reached its maximum size and no connection is currently available

java - 处理过时的域对象(Grails/GORM/Hibernate)引起的并发问题的策略

java - 如何在 Java 中更改 XML 属性的一部分?

java - 尝试理解已经制作的 JApplet 代码

java - 数组的特定元素匹配多个条件并返回 boolean 值

带点的单词的 Java 正则表达式

java - 在查询方法中使用 @Param 传递 java.util.Date

java - hibernate 中的 TransientObjectException