13

これを行う方法を見つけるのはそれほど難しいことではありません。基本的に、文字列を取得して、クライアントがボタンをクリックしたときにそれを保存できるようにしようとしています。保存/開くダイアログが表示されます。余分なベルやホイッスルなどはありません。それはロケット科学ではありません(または、私はそう思っていたでしょう)。

さまざまな方法 (StreamWriter、HttpResponse など) があるようですが、適切に機能するか、何が起こっているかを説明することができた例はありません。前もって感謝します。

私が見つけた多くのコードブロックの例...

(これは単なる例です。これに基づいて回答しないでください。)

String FileName = "FileName.txt";
String FilePath = "C:/...."; //Replace this
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();

2行目は、その文字列を置き換えることを示しています。どのように?このコードは、ダイアログを表示するものとして宣伝されていました。コードにパスを設定する必要はありませんよね?

編集: 最終結果 (再度編集、削除は End(); の前に来る必要があります)

        string FilePath = Server.MapPath("~/Temp/");
        string FileName = "test.txt";

        // Creates the file on server
        File.WriteAllText(FilePath + FileName, "hello");

        // Prompts user to save file
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "text/plain";
        response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
        response.TransmitFile(FilePath + FileName);
        response.Flush();

        // Deletes the file on server
        File.Delete(FilePath + FileName);

        response.End();
4

4 に答える 4

5

2 行目 (FilePath) は、サーバー上のファイルへのパスを示します。

8 行目:

response.TransmitFile(FilePath);

その特定のファイルをクライアントに送信すると、それが保存ダイアログをポップします。

ファイルを送信しない場合、(ヘッダーを設定しても) ダイアログがポップアップするかどうかはわかりません。

とにかく、8行目は次のように読むべきだと思います:

    response.TransmitFile(FilePath + FileName);
于 2012-05-30T14:18:20.707 に答える
3

Response が何らかのファイルとして検出された場合、ブラウザごとにデフォルトのダイアログ ボックスが表示されます。ブラウザーにそのデフォルトのダイアログ ボックスを表示させたい場合は、応答をファイルとしてブラウザーに送信するだけで済みます。これには、さまざまな方法があります。

  1. 静的ファイルの場合、

    • 最善の方法は、アンカー タグの href にファイルのパスを記載することです (明らかに、セキュリティ上の懸念がない場合)。
    • あなたの例で行われている方法で、あなたの応答と一緒に出てください。
    • ここで参照できる他の方法asp.netからpdfを送信する4つの方法
  2. 実行時に生成する必要がある動的ファイルの場合は、トリックを実行してファイルストリームからファイルを生成し、サーバーの一時フォルダーに配置して、上記のように静的ファイルとして読み戻すことができます。

于 2012-05-30T14:39:41.327 に答える
1

FilePathクライアントに送信したいファイルを指すはずです。これはサーバー上のパスです。

于 2012-05-30T14:14:06.843 に答える
1

このコードを使用するだけで、システム上のファイルを開くまたは保存するためのダイアログを開くようにユーザーに促すことができます....

byte[] bytesPDF = System.IO.File.ReadAllBytes(@"C:\sample.pdf");

        if (bytesPDF != null)
        {

            Response.AddHeader("content-disposition", "attachment;filename= DownloadSample.pdf");
            Response.ContentType = "application/octectstream";
            Response.BinaryWrite(bytesPDF);
            Response.End();
        }
于 2014-05-22T20:06:11.903 に答える