0

ユーザーが別のユーザーによってアップロードされたファイルをダウンロードできるようにするコードを書くのはこれが初めてです。

次のようなコードで ASHX ファイル download.ashx を作成しました。

s = context.Request.QueryString.ToString();
byte[] buffer = new ReplacementTicketFileIO().GetSpecifiedFile(s);
context.Response.BinaryWrite(buffer);
context.Response.Flush();
context.Response.End();

ユーザーが適切なクエリ文字列を含む download.ashx へのリンクをクリックすると、ファイルがダウンロードされますが、ブラウザーはコンテンツをブラウザー ウィンドウに表示しようとします。ユーザーがリンクを右クリックすると、ファイルをダウンロードできますが、ファイルの名前はデフォルトで download.ashx になります。

私は2つのことを達成したいと思います:

1)クエリ文字列に基づいて、ユーザーのデバイスにダウンロードされたファイルのデフォルト名を指定できるようにしたいと考えています。

たとえば、ユーザーが download.ashx?linkedfile=car.pdf をクリックした場合、ブラウザのデフォルトでこのファイルの名前が car.pdf になるようにしたいと思います。

2) ブラウザー ウィンドウでリンクを開くのではなく、リンクを保存するようにブラウザーをデフォルト設定したいと思います。

これを行うのは合理的ですか、それともファイルをダウンロードするためのより良い方法はありますか? 私にお知らせください。

4

2 に答える 2

2

Content-DispositionHTTPヘッダーを設定します。例えば

Content-Disposition: attachment; filename=hello.jpg

これは、C#で次を使用して行うことができます。

 Response.AddHeader("Content-Disposition", "attachment; filename=hello.jpg");
于 2011-10-04T18:40:11.307 に答える
0

これが私がExcelファイルのために持っているものであり、それは新しいウィンドウではなくダウンロードを強制すると信じています。QueryStringのページプロパティがあります。QueryStringをキャプチャしてこのコードで使用し、コンテンツタイプを決定する必要があります。String.Formatを使用すると、クリーンなコードが得られます。

private string _ExcelFilename
{
        get
{
    return (Request.QueryString["xls"] != null) ? Request.QueryString"xls"] : "bis";
}
}

Page.Response.Clear();
Page.EnableViewState = false;
Page.Response.Clear();
Page.Response.ContentType = "application/vnd.ms-excel";
Page.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}_{1}.xls", _ExcelFilename, DateTime.Now.ToString("yyyyMMdd")));
Page.Response.Write(excel);
Page.Response.Flush();
Page.Response.End();
于 2011-10-04T18:43:48.963 に答える