WebDAV开源库
实现WebDaAV的开源库有:

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

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中设置联网权限

<uses-permission android:name="android.permission.INTERNET" />

安卓9.0以上的网络安全策略,需要单独配置。
在res目录下新建文件xml/network_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

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

原文链接:https://blog.csdn.net/taiq/article/details/111307412

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐