0

リボンにボタンを実装して複数のファイルをzip形式でダウンロードするSharepointのアプリケーションを作成しています...

すべてがうまくいき、すべてがうまくいきます...しかし、ChromeまたはFirefoxでzipをダウンロードしようとすると、何も起こりません。

私のコードはこれです:

private void WriteStreamToResponse(MemoryStream ms)
    {
        if (ms.Length > 0)
        {
            string filename = DateTime.Now.ToFileTime().ToString() + ".zip";
            Response.Clear();
            Response.ClearHeaders();
            Response.ClearContent();
            Response.ContentType = "application/zip"; //also tried application/octect and application/x-zip-compressed
            Response.AddHeader("Content-Length", ms.Length.ToString());
            Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

            byte[] buffer = new byte[65536];
            ms.Position = 0;
            int num;
            do
            {
                num = ms.Read(buffer, 0, buffer.Length);
                Response.OutputStream.Write(buffer, 0, num);
            }

            while (num > 0);

            Response.Flush();
        }
    }
4

2 に答える 2

1

Content-Length を削除し、コードに Flush() と End() を含めます。コードの最後に Close() を使用しないでください。すべてを宣言する前に使用できます。オクテット ストリームは通常、ファイルの種類が不明な場合に使用されるため、ファイルの種類がわかっている場合は使用しないでください。content-disposition として application/zip を使用します。

       string filename = DateTime.Now.ToFileTime().ToString() + ".zip";
        Response.Clear();
        Response.BufferOutput = false;
        Response.ClearHeaders();
        Response.ClearContent();
        Response.ContentType = "application/x-zip-compressed"; //also tried application/octect and application/x-zip-compressed         
        Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

        byte[] buffer = new byte[65536];
        ms.Position = 0;
        int num;
        do
        {
            num = ms.Read(buffer, 0, buffer.Length);
            Response.OutputStream.Write(buffer, 0, num);
        }

        while (num > 0);

        Response.Flush();
        Response.End();
于 2014-10-23T13:18:45.407 に答える
0

Application/octet-streamMIMEタイプとして試しましたか?

また

private void WriteStreamToResponse(MemoryStream ms)
{
    if (ms.Length > 0)
    {
        byte[] byteArray = ms.ToArray();
        ms.Flush();
        ms.Close();

        string filename = DateTime.Now.ToFileTime().ToString() + ".zip";
        Response.BufferOutput = true;
        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Length", ms.Length.ToString());
        Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

        Response.BinaryWrite(byteArray);
        Response.End();

    }
}
于 2012-06-21T11:33:28.533 に答える