0

これはコード、C# です。

System.Net.HttpWebRequest _Response =
    (HttpWebRequest)System.Net.WebRequest.Create(e.Uri.AbsoluteUri.ToString());
_Response.Method = "GET";
_Response.Timeout = 120000;
_Response.Accept =
    "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
_Response.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
_Response.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
_Response.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
_Response.AllowAutoRedirect = false;

System.Net.HttpWebResponse result = (HttpWebResponse)_Response.GetResponse();

for (int i = 0; i < result.Headers.Count; i++)
{
    MessageBox.Show(result.Headers.ToString());
}

で、これが結果で、

Cache-Control: private
Content-Type: text/html
Date: Tue, 06 Sep 2011 17:38:26 GMT
ETag: 
Location: http://fs31.filehippo.com/6428/59e79d1f80a74ead98bb04517e26b730/Firefox Setup 7.0b3.exe
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
4

7 に答える 7

3

正しいアプローチは、ファイル名がContent-Dispositionフィールドによって提供されているかどうかを確認し、それができない場合は、Locationフィールドからファイル名を推測しようとすることです。

場所フィールドは単にダウンロードリクエストのURLであるため、拡張子や意味のある名前が含まれていない可能性があることに注意してください。

于 2011-09-06T18:53:24.030 に答える
2

次のようにします。

    string fileName = Path.GetFileName(result.Headers["Location"]);

そうすれば、ロケーション ヘッダーの末尾にファイル名が表示されます。

于 2011-09-06T17:47:50.987 に答える
1

ファイルの場所がわかっている場合は、必要なヘッダーを抽出するだけで (この場合は、4またはでインデックス付けされていると思います"Location")、URL の最後の部分を取得します。

于 2011-09-06T17:45:43.310 に答える
1

リクエストのヘッダーがあれば、次のことができるはずです。

 string file = result.Headers["Location"];
于 2011-09-06T17:44:22.517 に答える
0

ファイルはサーバー上にあるため、実際のファイル名を取得することはできません。Web アプリケーションが伝えていることのみ。

このファイル名は「場所」にあります。

ただし、アプリケーションは text/html であることを通知しているため、送信する前に結果をフォーマットしている可能性があります。実行可能ファイルの正しい MIME タイプは、application/octet-stream です。

別の注意事項。ファイルをダウンロードしているようです。この場合、パスを指定する必要はありません。ダウンロードするファイルのパスは、ダウンロードしたストリームのコンテンツを配置するパスになります。したがって、ファイルを保存して、アクセスできる場所に配置します。

ファイルを作成するときは、パスを指定する必要があります。パスを指定しないと、それを呼び出している実行可能ファイルと同じディレクトリに配置されます。

これが役立つことを願っています

于 2011-09-06T18:02:08.213 に答える