1

サーバーにファイルがあります。

このファイルをダウンロードしたい。

私はこのコードを使用します

try
    {
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.BufferOutput = true;

        if (File.Exists(Server.MapPath("~/Upload/" + file)))
        {
            Response.AddHeader("Content-Disposition", "attachment; filename=" + file);
            Response.ContentType = "application/octet-stream";
            Response.WriteFile(("~/Upload/" + file));
            Response.End();
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }
        else
        {
            if (Request.UrlReferrer != null)
            {
                Type csType = GetType();
                string jsScript = "alert('File Not Found');";
                ScriptManager.RegisterClientScriptBlock(Page, csType, "popup", jsScript, true);
            }
        }
    }
    catch (Exception ex)
    {
        string errorMsg = ex.Message;
        ScriptManager.RegisterClientScriptBlock(Page, GetType(), "popup", errorMsg, true);
    }

しかし、これを使用するとエラーが発生します

コードが最適化されているか、ネイティブ フレームがコール スタックの一番上にあるため、式を評価できません。

コードで

Response.End();

すべての種類のファイルをダウンロードする方法は?

4

2 に答える 2

0

これは Web フォーム、MVC、またはカスタム IHttpHandler ですか?

Response.End()いずれにせよ、関数からorを呼び出す必要はなくHttpContext.Current.ApplicationInstance.CompleteRequest()return応答に他に何も書き込まれないようにします。

于 2013-02-07T08:15:13.673 に答える
0

やってみました :

Response.TransmitFile(Server.MapPath("~/Upload/" + file));

それ以外の :

Response.WriteFile(("~/Upload/" + file));

BufferOutput も削除する必要があります(Response.End()なしでは悪い考えですResponse.Flush()

于 2013-02-07T08:29:59.997 に答える