2

この非常に基本的なjsコードを使用して呼び出す汎用ハンドラーがあります。

    var formData = new FormData();

    formData.append("fileId", this.model.get("id"));

    xhr = new XMLHttpRequest();

    xhr.open('POST', '/genericHandlers/DownloadFile.ashx');

    xhr.onload = function () {
        if (xhr.status === 200) {
            // Do something here?
        }
    }

    xhr.send(formData);

私の汎用ハンドラーコードは私には問題ないように見えます。基本的に、私は応答ヘッダーを作成しようとしていますが、このハンドラーが返されると、ファイルのダウンロードが開始されると思いました。

ハンドラーコード:

   var fileId = context.Request.Form["fileId"];

   // File stored in the db as a byte array

   var file = (from f in dataContext.OneEVA_Docs_File_Storages
          where Equals(f.ID, fileId)
          select f).FirstOrDefault();

   context.Response.Clear();

   context.Response.AddHeader("Content-Type", file.ContentType);
   context.Response.AddHeader("Content-Length", file.ContentLength.ToString());

   context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}; size={1}", file.Name, file.ContentLength));

   context.Response.BinaryWrite(file.File_Image.ToArray());
   context.Response.Flush();

   context.Response.End();

リクエストはXHR正常に完了します。返される応答ヘッダーは次のとおりです。

Cache-Control:private
Connection:Close
Content-Disposition:attachment; filename=Mikes File; size=1860113
Content-Length:1860113
Content-Type:image/jpeg
Date:Wed, 16 May 2012 14:08:01 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319

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

4

1 に答える 1

2

ブラウザでのダウンロードは開始されません。POSTリクエストを使用して達成することは困難です。IDのみを渡す場合、それはGETリクエストではありませんか?その後、あなたはただします

document.location.href = '/genericHandlers/DownloadFile.ashx?id=' + this.model.get("id");
于 2012-05-16T16:16:05.180 に答える