2014-08-28 65 views
1

任何人都可以给我提供一个使用Commons VFS API将文件从http服务器传输到Local的示例实现。使用Commons VFS的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 

请提供我是否遗漏了一些东西的信息。

回答

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)。