9

私は何日もこの問題の解決策を探していますが、何も見つかりません。

Webクライアントを使用してWebサーバーからファイルをダウンロードしたい。ダウンロードは正常に機能しますが、実際のファイル名を取得できません。これは私にとって非常に重要です。

私は多くのホームページで、ファイル名をContent-Disposition-Headerに保存する必要があることを読みました。残念ながら、サイトのこのヘッダーは空です。私はそれを手に入れようとしました:

string header_contentDisposition ="";
using (WebClient client = new WebClient())
            {
                client.OpenRead(link);

                header_contentDisposition = client.ResponseHeaders["Content-Disposition"];
                MessageBox.Show(header_contentDisposition);
            }

このヘッダー内に保存される情報はありません。

ブラウザ(IE、Opera、Chrome)でファイルをダウンロードしようとすると、ファイル名がファイルダイアログに表示されるため、どこかに保存する必要があります。

私がどこでそれを見つけることができるか想像できますか?

編集:リンクは次のようなphpによって生成されるため、URLから抽出できません

http://www.example.com/download.php?id=10
4

1 に答える 1

18

あなたはこれを試すことができます:

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        try
        {

            HttpWebResponse res = (HttpWebResponse)request.GetResponse();
            using (Stream rstream = res.GetResponseStream())
            {
                string fileName = res.Headers["Content-Disposition"] != null ?
                    res.Headers["Content-Disposition"].Replace("attachment; filename=", "").Replace("\"", "") :
                    res.Headers["Location"] != null ? Path.GetFileName(res.Headers["Location"]) : 
                    Path.GetFileName(url).Contains('?') || Path.GetFileName(url).Contains('=') ?
                    Path.GetFileName(res.ResponseUri.ToString()) : defaultFileName;
            }
            res.Close();
        }
        catch { }

これをhttp://upload.p-kratzer.com/index.php?dir3%file=asdfasdfwervdcvvedbでテストしたところ、wetter.JPGが返されます。

于 2012-11-26T19:11:58.213 に答える