WebDav之Sardine基本用法

使用 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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章