C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WebDAVファイル削除など


(過去ログ 159 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■91979 / inTopicNo.1)  WebDAVファイル削除など
  
□投稿者/ furu (2回)-(2019/08/15(Thu) 19:02:50)

分類:[C#] 

VS2017 .Net4.6.1

WebDAVへのアクセスで困っています。

WebDAVで、ファイルのアップロードを以下の方法で行っていました。

byte[] buff;
using (var fs = new FileStream(@"C:\aaaa\bbbb.ccc", FileMode.Open, FileAccess.Read))
using (var rd = new BinaryReader(fs))
{
    buff = new byte[fs.Length];
    rd.Read(buff, 0, buff.Length);
}

using (var wc = new WebClient())
{
    wc.Credentials = new NetworkCredential("xxxx", "yyyy");

    using (var stm = wc.OpenWrite(@"https://hhhh.jjj/kkk/mmmm.nnn", "PUT"))
        stm.Write(buff, 0, buff.Length);
}

今回、ファイル削除を行うのにWebClientでのやり方がわからず
ネットで調べ、以下の方法で成功しました。

var hwq = (HttpWebRequest)WebRequest.Create(@"https://hhhh.jjj/kkk/mmmm.nnn");

hwq.Credentials = new NetworkCredential("xxxx", "yyyy");
hwq.PreAuthenticate = true;
hwq.Method = "DELETE";

using (hwq.GetResponse()){ }

アップロードにWebClientを使うのだったら
削除もWebClientでできないですか?

また、ファイル一覧取得はどうやったらよいですか?

よろしくお願いします。

引用返信 編集キー/
■91992 / inTopicNo.2)  Re[1]: WebDAVファイル削除など
□投稿者/ とっちゃん (616回)-(2019/08/16(Fri) 10:26:07)
No91979 (furu さん) に返信

> アップロードにWebClientを使うのだったら
> 削除もWebClientでできないですか?
>
WebClient に DELETE コマンドのラッパーはなかったと思います。
リファレンスにも出てますが、新しい開発には HttpClient をお勧めしてるようなので
そっちに統一するという選択肢もあると思います。

> また、ファイル一覧取得はどうやったらよいですか?
>
> よろしくお願いします。

WebDAV なんてエクスプローラ経由でしか使ったことがないからよくわからないので見つけた記事のリンクを張っておきます。
記事自体は、読んでないのでこれで役に立つかわかりませんが、参考にはなると思います。
ストレートにHTTPコマンドを使うなら、HttpClient のほうが楽だと思います。

https://www.atmarkit.co.jp/ait/articles/0109/22/news002.html

引用返信 編集キー/
■91993 / inTopicNo.3)  Re[2]: WebDAVファイル削除など
□投稿者/ とっちゃん (617回)-(2019/08/16(Fri) 10:31:11)
リンク記事2回目のところにクライアントの実装のことが書いてあると思ったらアプリの紹介だけだった。。。

第1回のところにRFC(リファレンス)のリンクがあるので、最悪そっちを見てもらうということで。。。

最近 WebDAV でアクセスって聞かなくなってしまったけど。。。Webフォルダって今は使えないんだっけ?

引用返信 編集キー/
■91997 / inTopicNo.4)  Re[3]: WebDAVファイル削除など
□投稿者/ KOZ (24回)-(2019/08/16(Fri) 12:04:54)
No91993 (とっちゃん さん) に返信
> リンク記事2回目のところにクライアントの実装のことが書いてあると思ったらアプリの紹介だけだった。。。
> 第1回のところにRFC(リファレンス)のリンクがあるので、最悪そっちを見てもらうということで。。。

一覧取得の実装っぽいのを見つけました。VB.NET ですけど。

「Howto: WebDAV PROPFIND using VB.NET」
https://blogs.msdn.microsoft.com/webdav_101/2008/03/12/howto-webdav-propfind-using-vb-net/


> 最近 WebDAV でアクセスって聞かなくなってしまったけど。。。Webフォルダって今は使えないんだっけ?

一応つかえるっぽいですよ。

引用返信 編集キー/
■92000 / inTopicNo.5)  Re[4]: WebDAVファイル削除など
□投稿者/ Hongliang (864回)-(2019/08/16(Fri) 12:23:41)
実際に試してはいないですが、
.UploadData(url, "DELETE", new byte[0])
でいけませんかね。

// WebDAVのお勉強というのでもない限り、NuGetでライブラリ拾うのが早そう。
引用返信 編集キー/
■92002 / inTopicNo.6)  Re[2]: WebDAVファイル削除など
□投稿者/ furu (4回)-(2019/08/16(Fri) 15:12:31)
みなさん、ありがとうございます。

> リファレンスにも出てますが、新しい開発には HttpClient をお勧めしてるようなので
> そっちに統一するという選択肢もあると思います。

HttpClientで動いたので、とりあえず解決済みとします。

//Basic認証設定
var parameter = Convert.ToBase64String(Encoding.UTF8.GetBytes("xxxx:yyyy"));

httpClient.DefaultRequestHeaders.Authorization =
   new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", parameter);

//ファイルアップロード
var content = new ByteArrayContent(File.ReadAllBytes(@"C:\aaaa\bbbb.ccc"));

content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");

var r =  await httpClient.PutAsync(uri, content);

//ファイル削除
var r =  await httpClient.DeleteAsync(uri);

//ファイル一覧
var request = new HttpRequestMessage(new HttpMethod("PROPFIND"), uri);

request.Headers.Add("Depth", "1");

var r =  await this._httpClient.SendAsync(request);

var rep = await r.Content.ReadAsByteArrayAsync();

var s = new ASCIIEncoding().GetString(rep);

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -