1

任何人都可以为我提供一个使用 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

请提供输入是否我在这里错过了什么。

4

1 回答 1

0

如果您使用StandardFileSystemManager()它,它将从类路径(从核心和沙盒 jar 中的 provider.xml 和 vfs-provider.xml 文件)读取其配置。因此,它已经使用 http 和 https 的提供者进行了初始化。

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

如果您想手动配置管理器,您可以使用 anew DefaultFileSystemManger()代替。(这需要添加缓存、复制器等内容)。

于 2015-01-05T23:34:58.797 回答