0

次のようなリンクからファイルをダウンロードしようとしています: www.sample.com/download.php?id=1234231

このリンクからどのファイルを取得するかわかりません。最初に試してみwebclient.downloadfile(link,path)ましたが、ファイルがあるはずのフォルダーとして指定したパスにより、アクセス拒否エラーが発生しました。私の問題は、取得するファイルを特定できないことです。

私は次のようなことを試しました:

var wreq = (HttpWebRequest)HttpWebRequest.Create(link);
using (var res = (HttpWebResponse) wreq.GetResponse())
{
    using (var reader = new StreamReader(res.GetResponseStream()))
    {
        //get filename Header
        var filenameHeader =
            res.GetResponseHeader("Content-Disposition")
               .Split(';')
               .Where(s => s.Contains("filename"))
               .ToList()[
                   0];
        var fileName = filenameHeader.Replace(" ", "").Split('=')[1];
        //clear fileName
        fileName = fileName.Replace(":", "");
        using (var writer = new StreamReader(Path.Combine(folderToSave , fileName),FileMode.Create))
        {
            writer.Write(reader.ReadToEnd());
        }
    }
}

それよりも簡単なことはありませんか?
ファイルをダウンロードしても「Content-Disposition」ヘッダーが表示されない可能性はありますか?

最後に、現在、を使用してファイルを書き込もうとしていますStreamWriterが、結果のファイルが破損しています。これはバイナリ形式で書かれていないことに関係していると思いますが、よくわかりません。

「Content-Length」ヘッダーも確認しましたが、それは とは異なる値でした。response.GetResponse().ToString().Lengthヘッダーも長さとしてカウントされているのでしょうか?

4

1 に答える 1