使用Commons VFS进行Http文件传输

时间:2014-08-28 11:24:41

标签: java apache-commons-vfs

任何人都可以为我提供一个示例实现,使用Commons VFS API将文件从http服务器传输到本地。

我试过下面的代码,

StandardFileSystemManager manager = new StandardFileSystemManager();
    manager.init();
    if ("http".equals(source.getScheme())) {
            manager.addProvider("http", new HttpFileProvider());
            manager.setCacheStrategy(CacheStrategy.ON_CALL);
            manager.setFilesCache(new SoftRefFilesCache());
    } else if ("https".equals(source.getScheme())) {
            manager.addProvider("https", new HttpsFileProvider());
            manager.setCacheStrategy(CacheStrategy.ON_CALL);
            manager.setFilesCache(new SoftRefFilesCache());
    }...

但是我在尝试运行时收到以下错误。

Caused by: org.apache.commons.vfs2.FileSystemException: Multiple providers registered for URL scheme "http".
at org.apache.commons.vfs2.impl.DefaultFileSystemManager.addProvider(DefaultFileSystemManager.java:180)
at org.apache.commons.vfs2.impl.DefaultFileSystemManager.addProvider(DefaultFileSystemManager.java:158)
at com.scb.smartbatch.adapters.VFSAdapter.copyFiles(VFSAdapter.java:150)
at com.scb.smartbatch.adapters.VFSAdapter.send(VFSAdapter.java:762)
... 33 more

请提供输入,我是否遗漏了这里的内容。

1 个答案:

答案 0 :(得分:0)

如果使用StandardFileSystemManager(),它将从类路径中读取其配置(来自core.xml和sandbox jar中的provider.xml和vfs-provider.xml文件)。因此,它已经使用http和https的提供程序进行了初始化。

您可以围绕添加提供商执行if (manager.hasProvider("http")),或者只是跳过添加提供程序并依赖自动配置。通常,您将使用VFS.getManager()来获取已注册所有已知提供程序的完全配置的FileSystemManager。

如果您想手动配置管理器,则可以使用new DefaultFileSystemManger()。 (这需要添加stuff like cache, replicator and so on)。