2014-08-28 5 views
1

Может ли кто-нибудь предоставить мне пример реализации для передачи файлов с http-сервера на локальный, используя Commons VFS API.Передача файла Http с использованием Commons VFS

Я попытался ниже код,

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(), он будет считывать его конфигурацию из пути к классам (из файлов provider.xml и vfs-provider.xml в ядре и ящике песочницы). Поэтому он уже инициализирован провайдерами для http и https.

Вы можете либо сделать if (manager.hasProvider("http")) вокруг добавления провайдера, либо просто пропустить добавление поставщиков и полагаться на автоматическую настройку. Как правило, вы должны использовать VFS.getManager(), чтобы получить полностью настроенный FileSystemManager со всеми зарегистрированными зарегистрированными провайдерами.

Если вы хотите сконфигурировать менеджера вручную, вместо этого вы должны использовать new DefaultFileSystemManger(). (для этого необходимо добавить stuff like cache, replicator and so on).