2

次のように、 asp.net 2.0でファイルをダウンロードするWebサービスを作成しようとしています(ファイルを開くまたは保存するポップアップウィンドウ)。

$.ajax({
        type: "POST",
        url: "webservice.asmx/download",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        success: function (res) {
            console.log("donwloaded");
        }
    });

そして「webservice.asmx」で

[WebMethod()]
public byte[] DownloadFile(string FName)
{
    System.IO.FileStream fs1 = null;
    fs1 = System.IO.File.Open(FName, FileMode.Open, FileAccess.Read);
    byte[] b1 = new byte[fs1.Length];
    fs1.Read(b1, 0, (int)fs1.Length);
    fs1.Close();
    return b1;
}

[WebMethod]
public void download()
{
    string filename = "test.txt";
    string path = "C:\\test.txt";

    byte[] ls1 = DownloadFile(path);
    HttpResponse response = Context.Response;

    response.Clear();
    response.BufferOutput = true;
    response.ContentType = "application/octet-stream";
    response.ContentEncoding = Encoding.UTF8;
    response.AppendHeader("content-disposition", "attachment; filename=" + filename);

    response.BinaryWrite(ls1);

    response.Flush();
    response.Close();
}

このようにして、ファイルの内容を確認できます (ポップアップ ウィンドウでファイルをダウンロードすることはできません)。

どこが間違っていますか?これを行うことは可能ですか?

前もって感謝します

4

2 に答える 2

1

これは良い方法ではありません。ポップアップ ウィンドウからファイルをダウンロードするには、新しいポップを開いて、そのウィンドウの URL がファイルまたは Web サービスの URL を指すようにします。

window.open("fileurl"  )
于 2013-09-20T15:55:53.043 に答える
0

これを行う良い方法は、ajax 経由で呼び出すのではなく、単にブラウザーを "webservice.asmx/download" にリダイレクトすることです。すなわち

window.location.href = 'webservice.asmx/download';

ブラウザが octet-stream を返すことを検出すると、ファイルをダウンロードするように求められますが、表示していたページはクリア/消去されません。

于 2013-09-20T19:21:39.670 に答える