Spring Boot WebDav内のファイルを削除する

Spring Boot

この記事では、JavaのSpring Bootを利用してWebDav内に保存されているファイル削除する方法を解説します。

JavaLearning

よく利用する処理を書き出す

WebDavサーバの情報を保持するオブジェクトクラスを作成する

オブジェクトクラスにWebDavのURLや、認証のためのユーザーやパスワードを持たせておきます。

package com.example;

public class WebDavServerObject {
    
    private Integer davId;
    private String davName;
    private String davUrl;
    private String davUserId;
    private String davUserPass;



    public Integer getDavId() {
        return this.davId;
    }

    public void setDavId(Integer davId) {
        this.davId = davId;
    }

    public String getDavName() {
        return this.davName;
    }

    public void setDavName(String davName) {
        this.davName = davName;
    }

    public String getDavUrl() {
        return this.davUrl;
    }

    public void setDavUrl(String davUrl) {
        this.davUrl = davUrl;
    }

    public String getDavUserId() {
        return this.davUserId;
    }

    public void setDavUserId(String davUserId) {
        this.davUserId = davUserId;
    }

    public String getDavUserPass() {
        return this.davUserPass;
    }

    public void setDavUserPass(String davUserPass) {
        this.davUserPass = davUserPass;
    }
}

認証情報を作成する

WebDavを利用する際には、Basic認証が必要になることがよくあります。
その場合認証情報を作成するメソッドは、よく利用するのであらかじめ書き出しておきます。

// 認証情報作成
private static String getAuthorizationString(String username, String password) {
    String userpass = username + ":" + password;
    return Base64.getEncoder().encodeToString(userpass.getBytes());
}

ファイルやフォルダが存在するかを確認する

WebDav内のファイルやフォルダの存在を確認するメソッドもよく利用するのであらかじめ書き出しておきます。

// WebDavフォルダの存在確認
private static boolean checkWebDavFolderExistence(String webdavUrl, String username, String password) {
    try {
        URL url = new URL(webdavUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("HEAD");
        connection.setRequestProperty("Authorization", "Basic "
            + getAuthorizationString(username, password));
        int responseCode = connection.getResponseCode();
        connection.disconnect();
        return responseCode == HttpURLConnection.HTTP_OK;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

ファイルを削除する

あらかじめ作っておいたメソッドを利用しながら、WebDavに保存されているファイルを削除します。

public ResponseEntity<Void> deleteFile4Webdav(  WebDavServerObject davServer
                                            ,   String fileName) throws IOException {

    String webdavServerUrl = davServer.getDavUrl() + "/folderPath/" + fileName;
    if (!checkWebDavFolderExistence(webdavServerUrl, davServer.getDavUserId(), davServer.getDavUserPass())) {
        throw new IOException("the same file not exists.");
    }

    URL url = new URL(webdavServerUrl);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("DELETE");
    connection.setRequestProperty("Authorization", "Basic "
        + getAuthorizationString(davServer.getDavUserId(), davServer.getDavUserPass()));
    Integer responseCode = connection.getResponseCode();
    connection.disconnect();

    if (responseCode == HttpStatus.NO_CONTENT.value()) {
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    } else {
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

今まで紹介したメソッドは、WebDavサーバの情報を保持するオブジェクトクラス意外全てをサービスクラスに記載します。
全てをまとめると、サービスクラスは以下のようになります。

package com.example;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

import com.example.WebDavServerObject;


@Service
public class WebdavFileManagementService {


public ResponseEntity<Void> deleteFile4Webdav(  WebDavServerObject davServer
                                            ,   String fileName) throws IOException {

    String webdavServerUrl = davServer.getDavUrl() + "/folderPath/" + fileName;
    if (!checkWebDavFolderExistence(webdavServerUrl, davServer.getDavUserId(), davServer.getDavUserPass())) {
        throw new IOException("the same file not exists.");
    }

    URL url = new URL(webdavServerUrl);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("DELETE");
    connection.setRequestProperty("Authorization", "Basic "
        + getAuthorizationString(davServer.getDavUserId(), davServer.getDavUserPass()));
    Integer responseCode = connection.getResponseCode();
    connection.disconnect();

    if (responseCode == HttpStatus.NO_CONTENT.value()) {
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    } else {
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}


// 認証情報作成
private static String getAuthorizationString(String username, String password) {
    String userpass = username + ":" + password;
    return Base64.getEncoder().encodeToString(userpass.getBytes());
}


// WebDavフォルダの存在確認
private static boolean checkWebDavFolderExistence(String webdavUrl, String username, String password) {
    try {
        URL url = new URL(webdavUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("HEAD");
        connection.setRequestProperty("Authorization", "Basic "
            + getAuthorizationString(username, password));
        int responseCode = connection.getResponseCode();
        connection.disconnect();
        return responseCode == HttpURLConnection.HTTP_OK;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

}

コントローラークラスから呼び出す

WebDavに書き込むメソッドを呼び出すコントローラークラスを作成します。
ブラウザなどからファイル削除の命令を受け取るのは、このコントローラークラスになります。

package com.example;

import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.WebDavServerObject;

@RestController
public class WebdavApiManagementController {


    @Autowired
    private WebdavFileManagementService webdavFileManagementService;


    @PostMapping(value="/delete")
    public void deleteFile(@RequestParam("fileName") String fileName) {

        // 適切にWebDavServer情報を取得するよう書き換えてください
        WebDavServerObject davServer = new WebDavServerObject();

        try {
            webdavFileManagementService.deleteFile4Webdav(davServer, fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

まとめ

今回は、WebDavに保存されているファイルを削除する方法を解説しました。
他にもWebDavに関する以下の記事を公開していますので、よろしければそちらもご覧ください。

それでは〜。

コメント

タイトルとURLをコピーしました