1

私はその場でファイルジッパーを書いています。

将来のアーカイブの正しいファイルサイズを計算できないため、Content-Lengthを指定できます。

このコードは、両方のThread.Sleep()メソッドが返されるまで、ファイルの保存ダイアログを表示しませんでした。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Download()
    {
        return new DelayedUnsepcifiedLengthZipArchiveResult();
    }
}

public class DelayedUnsepcifiedLengthZipArchiveResult : ActionResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.ContentType = "application/zip";
        context.HttpContext.Response.CacheControl = "private";
        context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        context.HttpContext.Response.AddHeader("content-disposition", string.Format("attachment; filename=\"{0}\"", "test.zip"));
        context.HttpContext.Response.Flush();

        Thread.Sleep(10000);

        context.HttpContext.Response.Write("hello world");
        context.HttpContext.Response.Flush();

        Thread.Sleep(10000);

        context.HttpContext.Response.Write("hello world2");
        context.HttpContext.Response.Flush();

        context.HttpContext.Response.End();
    }
}

ChromeとIE10では、20秒後に保存ダイアログが表示されました...

それを修正する方法ですか?

アップデート:

フィドラーは夢中になる。確かではありませんが、おそらくFidlerはConent-Lengthを自動的に追加します。これは私がfidlerから取得した生データです

開始時

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: application/zip
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 4.0
content-disposition: attachment; filename="test.zip"
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcV29ya1xBY2FkZW15XEhpZ2hMb2FkQ2hhblxEb3dubG9hZGVyXGhvbWVcZG93bmxvYWQ=?=
X-Powered-By: ASP.NET
Date: Mon, 04 Mar 2013 13:39:24 GMT

ダウンロードが終了した後:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/zip
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 4.0
content-disposition: attachment; filename="test.zip"
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcV29ya1xBY2FkZW15XEhpZ2hMb2FkQ2hhblxEb3dubG9hZGVyXGhvbWVcZG93bmxvYWQ=?=
X-Powered-By: ASP.NET
Date: Mon, 04 Mar 2013 13:39:24 GMT
Content-Length: 23

hello worldhello world2

更新2:

fiddler coused such veird behaviour, problem closed. Turn off your debug proxies bros...
4

0 に答える 0