1

次の Ajax 呼び出しがあります。

    $.ajax({
    type: 'POST',
    url: 'AJAX.aspx/DownloadFile',
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data)
    {
        window.location.href = 'data:txt/octet-stream;base64, ' + data.d;
    },
    error: function (x, e)
    {
        alert("The call to the server side failed. " + x.responseText);
    }
});

そして、ここに私のサーバー側のコードがあります:

[WebMethod]
public static string DownloadFile(){
    HttpResponse response = HttpContext.Current.Response;
    response.AppendHeader("Content-Disposition", "attachment;filename=b.txt");
    FileStream fs = new FileStream("C:/b.txt", FileMode.OpenOrCreate);
    byte[] data=new byte[fs.Length];
    fs.Read(data, 0, (int)fs.Length);        
    fs.Close();
    return Convert.ToBase64String(data);
}

ここには2つの問題があります:

  1. Opera、Firefox、Chrome では、サーバーから送信された base64 バイナリ データで構成されるファイルをダウンロードできます。それらの唯一の問題は、ファイル名がブラウザのデフォルトであることです.Operaでは「デフォルト」、Chromeでは「ダウンロード」、Firefoxでは「lpyQswKF.part」のようなものです。名前を手動で割り当てるにはどうすればよいですか?

  2. IE で次のエラーが表示されます:「Web ページを表示できません。この Web ページの一部のコンテンツまたはファイルには、インストールされていないプログラムが必要です。」

4

1 に答える 1

1

次のようにファイル名を割り当てることができます。

var a = document.createElement("a");

a.download = "file name";

a.href = 'data:txt/octet-stream;base64,' + data.d;

document.body.appendChild(a);

a.click();

IEで動作させる方法をまだ探しています

于 2013-01-26T15:12:05.627 に答える