1

ファイルの動的ダウンロードを提供したい。これらのファイルはサーバーサイドでオンザフライで生成できるため、byte []として表され、ディスクには存在しません。ユーザーがASP.NETフォームに入力し、ダウンロードボタンを押して、必要なファイルを返すようにします。

ASP.NETフォームの背後にある私のコードは次のようになります。

public partial class DownloadService : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void submitButtonClick(object sender, EventArgs e)
{
    if (EverythingIsOK())
    {
        byte[] binary = GenerateZipFile(); 
        Response.Clear();
        Response.ContentType = "application/zip";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.BinaryWrite(binary);
        Response.End();
    }
}
...
}

私はこのコードがうまく機能することを期待していました。Responeをクリアし、生成したzipファイルとビンゴを入れます。ただし、そうではありません。ブラウザに次のメッセージが表示されます。

XMLページを表示できませんスタイルシートを使用してXML入力を表示できません。エラーを修正してから[更新]ボタンをクリックするか、後でもう一度やり直してください。テキストコンテンツに無効な文字が見つかりました。リソースの処理中にエラーが発生しました' http:// localhost:15900 / mywebsite /DownloadS ..。

私は何が間違っているのですか?

4

3 に答える 3

2

行う必要のある小さな変更は次のとおりです。

Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.BinaryWrite(binary);
Response.End();
于 2009-01-22T12:25:18.707 に答える
2

これは私の(動作中の)実装です:

Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0} {1} Report for Week {2}.pdf\"", ddlClient.SelectedItem.Text, ddlCollectionsDirects.SelectedItem.Text, ddlWeek.SelectedValue));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();

mimeTypeは、アプリケーション/ zipに似ています(PDFを除く)。主な違いは、渡される追加のヘッダー情報と、Responseオブジェクトに対するFlush呼び出しです。

于 2009-01-22T12:26:50.140 に答える
0

アプリケーション/zipに関する情報については、こちらをご覧ください。ContentEncodingが間違っている可能性があります。そして、ここに他のタイプを送るためのガイドがあります。また、PDF用にそれを行う方法のガイドもあります。

于 2009-01-22T12:19:31.310 に答える