WebDav之Sardine基本用法

使用 Sardine 实现webDav文件操作

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

本文目录

      • 使用 Sardine 实现webDav文件操作
        • 依赖包
        • 使用类
        • 操作例子
          • 上传文件
          • 下载文件
          • 删除文件
          • 更改文件名称/移动文件路径
          • 创建目录
          • 判断文件是否存在

依赖包

<dependency>
    <groupId>com.github.lookfirstgroupId>
    <artifactId>sardineartifactId>
    <version>5.9version>
dependency>

使用类

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

操作例子

上传文件
/**
 * 上传文件 
* 当对应路径对应文件名已经存在,再次上传会覆盖掉原来的文件 * @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; }
下载文件
/**
 * 下载文件 
* 输出流输出 * @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); }
删除文件
/**
 * 删除文件或者目录 
* 删除目录必须以 / 结尾,会将指定目录的子目录以及文件全部删除 * @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(); }
更改文件名称/移动文件路径
/**
 * 更改文件/目录名称 
* 移动文件/目录 * 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);
}

你可能感兴趣的:(webdav)