Delphiでお手軽プログラミング

Delphiでお手軽プログラミングメニュー

Delphiでwebdavサーバーに接続してファイルのアップロード、一覧の取得、ファイルのダウンロードを行う


1.ApacheにWebdav設定を行う(Windowsの例)

c:\Apache24 にapacheがインストールされているとします。

(1)webdav用フォルダの作成

c:\Apache24 に「dav」フォルダを作成します。

(2)webdav用基本認証ユーザーの作成

コマンドプロンプトを起動し以下コマンドでbinディレクトリ移動します。
cd /D "c:\Apache24\bin"

パスワードファイルをユーザー「user」のパスワード「pass」を作成するには
htpasswd -c "c:\Apache24\.htpasswd" user
と入力してエンターを押し、新しいパスワードを聞いてきますのでpassを入力してエンターキーを押し、再度聞いてきますのでpassを入力してエンターキーを押します。

(3)httpd.confの編集

C:\Apache24\conf\httpd.conf をテキストエディタ(メモ帳など)で開きます。

以下3行をコメントではない(先頭#を消す)ようにします。
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_lock_module modules/mod_dav_lock.so

以下を追加します。
DAVLockDB "C:/Apache24/logs/DavLock"
Alias /dav "C:/Apache24/dav"
<Directory "C:/Apache24/dav">
    Dav On
    Options None Indexes

    AuthType Basic
    AuthName "DAV"
    AuthUserFile "C:/Apache24/.htpasswd"
    Require valid-user
    Order Allow,Deny
    Allow from all
</Directory>

(4)apacheの再起動

apacheを再起動してください



2.DelphiでWebdavサーバーにファイルをアップロードするソースコード

procedure TForm1.Button1Click(Sender: TObject);
var res: TStringStream;
    strm:TMemoryStream;
begin
  //「a.jpg」ファイルをWebDavにPUTする場合
  strm:=TMemoryStream.Create;
  strm.LoadFromFile('a.jpg');
  res := TStringStream.Create('');
  try
    //基本認証(ベーシック認証)の場合
    IdWebDAV1.Request.BasicAuthentication:=True;
    IdWebDAV1.Request.Username:='user';
    IdWebDAV1.Request.Password:='pass';
    //「a.jpg」ファイルを「abc.jpg」としてアップロードする
    IdWebDAV1.Put('http://localhost/dav/abc.jpg', strm, res);
    //レスポンスを表示する場合
    Memo1.Lines.Text := res.DataString;
  finally
    strm.Free;
    res.Free;
  end;
end;


3.DelphiでWebdavサーバーからファイルをダウンロードするソースコード

procedure TForm1.Button2Click(Sender: TObject);
var strm: TMemoryStream;
begin
  strm:=TMemoryStream.Create;
  try
    //基本認証(ベーシック認証)の場合
    IdWebDAV1.Request.BasicAuthentication:=true;
    IdWebDAV1.Request.Username:='user';
    IdWebDAV1.Request.Password:='pass';
    IdWebDAV1.Get('http://localhost/dav/abc.jpg',strm);
    strm.SaveToFile('zzz.jpg');
  finally
    strm.Free;
  end;
end;


4.DelphiでWebdavサーバーのファイル一覧をXMLでダウンロードするソースコード

procedure TForm1.Button3Click(Sender: TObject);
var res: TStringStream;
begin
  res := TStringStream.Create('');
  try
    //基本認証(ベーシック認証)の場合
    IdWebDAV1.Request.BasicAuthentication:=true;
    IdWebDAV1.Request.Username:='user';
    IdWebDAV1.Request.Password:='pass';
    IdWebDAV1.Get('http://localhost/dav/',res);
    //レスポンスを表示
    Memo1.Lines.Text := res.DataString;
  finally
    res.Free;
  end;
end;

出力されたXMLの例

<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:">
  <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
    <D:href>/dav/</D:href>
    <D:propstat>
      <D:prop>
        <lp1:resourcetype><D:collection/></lp1:resourcetype>
        <lp1:creationdate>2021-01-18T11:53:05Z</lp1:creationdate>
        <lp1:getlastmodified>Sun, 31 Jan 2021 00:35:55 GMT</lp1:getlastmodified>
        <lp1:getetag>"1000-5ba276b98627a"</lp1:getetag>
        <D:supportedlock>
          <D:lockentry>
            <D:lockscope><D:exclusive/></D:lockscope>
            <D:locktype><D:write/></D:locktype>
          </D:lockentry>
          <D:lockentry>
            <D:lockscope><D:shared/></D:lockscope>
            <D:locktype><D:write/></D:locktype>
          </D:lockentry>
        </D:supportedlock>
        <D:lockdiscovery/>
      </D:prop>
      <D:status>HTTP/1.1 200 OK</D:status>
    </D:propstat>
  </D:response>
  <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
    <D:href>/dav/abc.jpg</D:href>
    <D:propstat>
      <D:prop>
        <lp1:resourcetype/>
        <lp1:creationdate>2021-01-31T00:35:55Z</lp1:creationdate>
        <lp1:getcontentlength>3270185</lp1:getcontentlength>
        <lp1:getlastmodified>Sun, 31 Jan 2021 00:35:55 GMT</lp1:getlastmodified>
        <lp1:getetag>"31e629-5ba276b982094"</lp1:getetag>
        <D:supportedlock>
          <D:lockentry>
            <D:lockscope><D:exclusive/></D:lockscope>
            <D:locktype><D:write/></D:locktype>
          </D:lockentry>
          <D:lockentry>
            <D:lockscope><D:shared/></D:lockscope>
            <D:locktype><D:write/></D:locktype>
          </D:lockentry>
        </D:supportedlock>
        <D:lockdiscovery/>
        <D:getcontenttype>image/jpeg</D:getcontenttype>
      </D:prop>
      <D:status>HTTP/1.1 200 OK</D:status>
    </D:propstat>
  </D:response>
  <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
    <D:href>/dav/a.txt</D:href>
    <D:propstat>
      <D:prop>
        <lp1:resourcetype/>
        <lp1:creationdate>2021-01-18T12:24:18Z</lp1:creationdate>
        <lp1:getcontentlength>42</lp1:getcontentlength>
        <lp1:getlastmodified>Mon, 18 Jan 2021 12:24:18 GMT</lp1:getlastmodified>
        <lp1:getetag>"2a-5b92bcd10d659"</lp1:getetag>
        <D:supportedlock>
          <D:lockentry>
            <D:lockscope><D:exclusive/></D:lockscope>
            <D:locktype><D:write/></D:locktype>
          </D:lockentry>
          <D:lockentry>
            <D:lockscope><D:shared/></D:lockscope>
            <D:locktype><D:write/></D:locktype>
          </D:lockentry>
        </D:supportedlock>
        <D:lockdiscovery/>
        <D:getcontenttype>text/plain</D:getcontenttype>
      </D:prop>
      <D:status>HTTP/1.1 200 OK</D:status>
    </D:propstat>
  </D:response>
</D:multistatus>


5.https(SSL/TLS)の場合はlibeay32.dll、ssleay32.dllファイルが必要

https://indy.fulgan.com/SSL/
等からOpenSSLファイルをダウンロードし、解凍してlibeay32.dll、ssleay32.dllファイルを、 パスの通った場所(c:\windows等)又は実行プログラムと同じ位置に配置します。
(Bit数は合わせる必要があります。 Delphiで32Bitコンパイルでビルトする場合は32BitのOpenSSLをダウンロードします。)



Copyright 2019 Mam