(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をダウンロードします。)