当前位置: 首页 > 工具软件 > Sardine > 使用案例 >

WebDav之Sardine基本用法

桓深
2023-12-01

使用 Sardine 实现webDav文件操作

基于 Sardine 实现对 WebDav 服务的文件上传、下载、删除、重命名、移动等操作

依赖包

<dependency>
    <groupId>com.github.lookfirst</groupId>
    <artifactId>sardine</artifactId>
    <version>5.9</version>
</dependency>

使用类

import com.github.sardine.Sardine;
import com.github.sardine.SardineFactory;

操作例子

上传文件
/**
 * 上传文件 <br/>
 * 当对应路径对应文件名已经存在,再次上传会覆盖掉原来的文件
 * @param filePath 文件的相对路径或者绝对路径均可
 * @param inputStream 输入流
 * @return 保存后的绝对路径
 * @throws IOException io异常
*/
public static String upload(String filePath, InputStream inputStream) throws IOException {
	// 如果路径中没有加上webDav的url,则添加上去,返回绝对路径
    filePath = CommonUtil.getAbsolutePath(config.getBaseUrl(), filePath);

    // 根据用户名、密码初始化Sardine对象
    Sardine sardine = SardineFactory.begin(config.getUserName(), config.getPassword());
    // 判断目录是否存在
    String dirPath = filePath.substring(0, filePath.lastIndexOf("/"));
    if (!exist(dirPath, sardine)) {
        mkdir(dirPath, sardine);
    }
	// 执行文件上传操作
    sardine.put(filePath, inputStream);

    return filePath;
}
下载文件
/**
 * 下载文件 <br/>
 * 输出流输出
 * @param filePath 文件路径
 * @param outputStream 输入流
 * @throws IOException io 异常
*/
public static void download2Stream(String filePath, OutputStream outputStream) throws IOException {
    // 获取绝对路径
    filePath = CommonUtil.getAbsolutePath(config.getBaseUrl(), filePath);
	// 初始化对象
    Sardine sardine = SardineFactory.begin(config.getUserName(), config.getPassword());
    if (exist(filePath, sardine)) {
        // get操作,读取文件
        InputStream inputStream = sardine.get(filePath);
        StreamUtil.transStream(inputStream, outputStream);
        sardine.shutdown();
        return;
    }
    logger.info("地址:{},文件不存在!", filePath);
}
删除文件
/**
 * 删除文件或者目录 <br/>
 * 删除目录必须以 / 结尾,会将指定目录的子目录以及文件全部删除
 * @param filePath 文件路径
 * @throws IOException 文件不存在报异常,404
*/
public static void delete(String filePath) throws IOException {
    filePath = CommonUtil.getAbsolutePath(config.getBaseUrl(), filePath);
	// 初始化对象
    Sardine sardine = SardineFactory.begin(config.getUserName(), config.getPassword());
    // 根据指定路径(url)执行删除操作
    sardine.delete(filePath);
    sardine.shutdown();
}
更改文件名称/移动文件路径
/**
 * 更改文件/目录名称 <br/>
 * 移动文件/目录
 * e.g.:
 * 1. 修改目录名称(20200619 改成 20200621)
 * http://ip:port/webdav/sardline/20200619/ > http://ip:port/webdav/sardline/20200621/
 * 2. 修改文件名称(9586.jpg 改成 3562.jpg)
 * http://ip:port/webdav/sardline/20200619/9586.jpg > http://ip:port/webdav/sardline/20200619/3562.jpg
 * 3. 移动文件夹 (将20200619目录移动到 date 下。注意必须以原来目录结尾,不然会将目录下的文件直接移动过去,20200619被删除)
 * http://ip:port/webdav/sardline/20200619/ > http://ip:port/webdav/sardline/date/20200619/
 * 4. 移动文件 (最后文件名如果指定不一样,会在移动后直接重命名)
 * http://ip:port/webdav/sardline/20200619/9980.jpg > http://ip:port/webdav/sardline/20200621/9980.jpg
 *
 * @param source 源目录/文件名
 * @param dest 目标目录、文件
 * @throws IOException io异常
*/
public static void move(String source, String dest) throws IOException {

    Sardine sardine = SardineFactory.begin(config.getUserName(), config.getPassword());

    if (exist(source, sardine)) {
        // 源文件存在
        String destDir = dest.substring(0, dest.lastIndexOf(Constants.SLASH));
        if (!exist(destDir, sardine)) {
            // 目标不存在,则创建
            mkdir(destDir, sardine);
        }
        // 执行重命名/移动操作
        sardine.move(source, dest);
        sardine.shutdown();
    } else {
        logger.info("源文件:{} 不存在", source);
    }
}
创建目录
/**
 * 创建目录,可递归创建
 * @param filePath 待创建目录
 * @throws IOException 抛出异常
*/
public static void mkdir(String filePath, Sardine sardine) throws IOException {
    String dirPath = filePath.replace(config.getBaseUrl(), "");
    if (StringUtils.isNotBlank(dirPath)) {
        String[] dirs = dirPath.split("/");
        String path = config.getBaseUrl();
        for (String dir : dirs) {
            if (StringUtils.isBlank(dir)) {
                continue;
            }
            path += dir + "/";
            if (!exist(path, sardine)) {
                // 执行创建目录操作
                sardine.createDirectory(path);
            }
        }
    }
}
判断文件是否存在
/**
 * 判断绝对路径(目录或者文件均可)是否已经存在
 * @param filePath 绝对路径
 * @return true: 已存在,false:不存在
 * @throws IOException io异常
*/
public static Boolean exist(String filePath, Sardine sardine) throws IOException {
    return sardine.exists(filePath);
}
 类似资料: