试图绕过Box文件/文件夹ID并支持许多其他服务我决定用WebDAV实现,因为我在我的linux盒子上有点熟悉它。我选择了一个基于JackRabbit修改的库,可以在Android上运行,这似乎符合我的需求。然而,不久我遇到了一个问题。
尝试列出Box的根条目时,multiStatus.getResponses()返回一个空数组。访问另一个webdav服务器时,我得到了预期的响应。两个服务器都按预期返回状态代码207。
我的代码如下,有什么想法吗?
编辑:我可以移动文件,但列出目录的条目不起作用:/
String host = "https://www.box.com/dav/";
//String host = "http://demo.sabredav.org/";
hostConfig = new HostConfiguration();
hostConfig.setHost(host);
HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
int maxHostConnections = 20;
params.setMaxConnectionsPerHost(hostConfig, maxHostConnections);
connectionManager.setParams(params);
client = new HttpClient(connectionManager);
Credentials creds = new UsernamePasswordCredentials("BOXEMAILADDRESS", "MYBOXPASSWORD");
//Credentials creds = new UsernamePasswordCredentials("testuser", "test");
client.getState().setCredentials(AuthScope.ANY, creds);
client.setHostConfiguration(hostConfig);
try
{
String propfindUri = host;
DavMethod method = new PropFindMethod(propfindUri, DavConstants.PROPFIND_ALL_PROP, DavConstants.DEPTH_1);
client.executeMethod(method);
Log.i("Status: " + method.getStatusCode());
MultiStatus multiStatus = method.getResponseBodyAsMultiStatus();
MultiStatusResponse[] responses = multiStatus.getResponses();
Log.i("Length: " + responses.length);
for(MultiStatusResponse response : responses)
{
Log.i("File: " + response.getHref());
}
}
catch (Exception e)
{
Log.printStackTrace(e);
}
答案 0 :(得分:1)
虽然Box对WebDAV有一些支持,但我们目前才正式支持iOS。我们的测试表明,我们对DAV的实现与Windows本机DAV客户端以及Panic-Transmit Mac特定客户端非常兼容。虽然那里的互动并不完全完美。
Box WebDAV与本机osX(Mac)webDAV客户端不兼容。期待巨大的延迟,因为它看起来客户端在显示任何内容之前尝试加载整个树。
Linux用户可以在这里告诉你StackTrace他们尝试过的各种操作系统webDAV客户端/库中的哪些,以及哪些操作系统比其他操作系统更好。
我们确实有计划在今年晚些时候改变我们的webDAV支持,但是我们没有具体的日期,只是webDAV客户端的性质是这样的,即使我们修复了许多问题它,webDAV上的一些客户体验可能仍然很糟糕。出于这个原因,我们可能只会正式认可每个平台的几个webDAV客户端/库。
希望有所帮助。