WebDAV开源库sardine

WebDAV开源库

实现WebDaAV的开源库有:

  1. lookfirst/sardine(https://github.com/lookfirst/sardine)
    据说使用的HttpClient和安卓部分依赖有些冲突,所以这里不使用。

  2. thegrizzlylabs/sardine-android(https://github.com/thegrizzlylabs/sardine-android)
    源于lookfirst/sardine,这里使用这个。

增加WebDAV

增加库

文件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"

API

所有方法都必须在新线程中进行,且对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)

WebDAV云服务器

  • 坚果云
    https://www.jianguoyun.com/

参考资料

  • 安卓WebDav接入方法_巴塞罗那的余晖的博客-CSDN博客_webdav 安卓
  • 【Android】WebDav For Android - 巴塞罗那的余晖 - 博客园
  • WebDav 第一次接触_贾大大的博客-CSDN博客
  • GitHub - tuacy/WebDav: android WebDAV client based on jackrabbit https://github.com/tuacy/WebDav/

你可能感兴趣的:(Android,android,android,studio)