2014-08-28 68 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)。