2

「 360セキュアブラウザ」というデスクトップブラウザがあります。中国ではかなりのシェアを持っており、サポートが求められています。

レイアウトエンジンは Trident (IE)であると書かれていますが、これは私が期待していたものですが、今は確認できません (Mac で!)。

この理由は、ダウンロードを開始し、バイトをクライアントにストリーミングするフォームがいくつかあり、それらが他の主要なブラウザーで動作するためです。問題の原因となるコードは以下のとおりです。これは私が気付かない何か間違ったことをしていますか?バイト ストリームは通常 50 ~ 100 KB のオーダーであり、まだ問題は発生していません。

  • このコードは、PostBack イベント (グリッド内のボタン クリックなど) に応答して呼び出されます。
  • この関数は、ファイルからのバイトストリーム、メモリ内での生成、または db からの読み取りで呼び出されます。

関数:

public static bool DownloadStream(byte[] packageStream, string fileName) {
    var response = HttpContext.Current.Response;
    response.Clear();
    response.AddHeader("Accept-Ranges", "bytes");
    response.AddHeader("Content-Disposition", "inline; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8));
    response.AddHeader("Content-Length", packageStream.Length.ToString());
    response.ContentType = "application/xlsx";
    response.BinaryWrite(packageStream);
    response.Flush();
    HttpContext.Current.ApplicationInstance.CompleteRequest();
    return true;
}

このブラウザをサポートした経験のある人はいますか? Googleで英語で検索しても情報が見つかりません仕様もドキュメントも何もありません。情報を探すためにバイドゥに行かなければならないのですが、そのレベルの中国語は読めません!

編集:

問題は、360 が使用するダウンローダーにあるようです。ただし、ストリーミング コードで変更する必要があるものがあるかどうかを知りたいです。不足しているヘッダー、またはその他のもの。

  • これは小さなファイルでのみ発生します。同じページ、より大きなダウンロード = 問題なし。
  • 組み込みの IE ダウンローダーに変更すると、問題が解消されます。
4

1 に答える 1

2

こんにちは、あなたのコードを 360 セキュア ブラウザで試してみました。それは私のために働きます。そして、私は以下を少し編集して私のコードです。注: 私が知っているように、360 セキュア ブラウザは IE Core を使用しています。

   protected void Page_Load(object sender, EventArgs e)
    {
        DownloadStream(StreamFile(@"C:\Users\My\Desktop\test2.xlsx"), "test.xlsx");
    }

    private byte[] StreamFile(string filename)
    {
        FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);

        // Create a byte array of file stream length
        byte[] Data = new byte[fs.Length];

        //Read block of bytes from stream into the byte array
        fs.Read(Data, 0, System.Convert.ToInt32(fs.Length));

        //Close the File Stream
        fs.Close();
        return Data; //return the byte data
    }


    public static bool DownloadStream(byte[] packageStream, string fileName)
    {
        var response = HttpContext.Current.Response;
        response.ClearContent();
        response.ClearHeaders();
        response.AppendHeader("Accept-Ranges", "bytes");
        response.AppendHeader("Content-Disposition", "inline; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8));
        response.AppendHeader("Content-Length", packageStream.Length.ToString());
        response.ContentType = "application/xlsx";
        response.BinaryWrite(packageStream);
        response.Flush();
        response.End();
        return true;
    }
于 2012-04-06T08:55:39.733 に答える