次のようなリンクからファイルをダウンロードしようとしています: 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
ヘッダーも長さとしてカウントされているのでしょうか?