实现WebDaAV的开源库有:
lookfirst/sardine(https://github.com/lookfirst/sardine)
据说使用的HttpClient和安卓部分依赖有些冲突,所以这里不使用。
thegrizzlylabs/sardine-android(https://github.com/thegrizzlylabs/sardine-android)
源于lookfirst/sardine,这里使用这个。
文件app/build.gradle中增加
implementation 'com.thegrizzlylabs.sardine-android:sardine-android:0.7'
因为涉及到网络,所以需要在AndroidManifest.xml中设置联网权限
安卓9.0以上的网络安全策略,需要单独配置。
在res目录下新建文件xml/network_config.xml
文件AndroidManifest.xml的application标签中增加属性
android:networkSecurityConfig="@xml/network_config"
所有方法都必须在新线程中进行,且对UI的直接操作要放回主线程进行,可以考虑使用Handler。
Sardine sardine = new OkHttpSardine();
sardine.setCredentials("username", "password");
username和password 就是你的用户名和密码
sardine.creatDirectory(url)
sardine.createDirectory("https://dav.jianguoyun.com/dav/目录名称/");
List<DavResource> resources = null;
try {
resources = sardine.list("https://dav.jianguoyun.com/dav/");//如果是目录一定别忘记在后面加上一个斜杠
for (DavResource res : resources)
{
listNames += res + "\n";
}
} catch (IOException e) {
e.printStackTrace();
}
sardine.exists(url)
//判断文件是否存在
if (sardine.exists("https://dav.jianguoyun.com/dav/file1.jpg"))
System.out.println("got here!");
//判断路径是否存在
if (sardine.exists("https://dav.jianguoyun.com/dav/file/"))
System.out.println("got here!");
sardine.get(url)
InputStream is = sardine.get("https://dav.jianguoyun.com/dav/" + "文件目录" + "file.jpg");
sardine.put(url, content)
byte[] data = FileUtils.readFileToByteArray(new File("/file/on/disk"));
sardine.put("http://yourdavserver.com/adirectory/nameOfFile.jpg", data);
或者使用
InputStream fis = new FileInputStream(new File("/some/file/on/disk.txt"));
sardine.put("http://yourdavserver.com/adirectory/nameOfFile.jpg", fis);
节省内存空间
sardine.delete(url)
sardine.delete("http://yourdavserver.com/adirectory/nameOfFile.jpg");
sardine.move(url, desturl)
sardine.copy(url, desturl)
只读状态只能执行get(url)方法
sardine.lock(url) return 锁定令牌 (String)
sardine.refreshlock(url, token, file)
sardine.unlock(url, token)
sardine.getAcl(url)
sardine.setAcl(url, aces)
sardine.getPrincipalCollectionet(url)