3

以下のアルゴリズムを使用して json ファイルを gzip しました (from: java gzip can't keep original file's extension name )

private static boolean compress(String inputFileName, String targetFileName){
         boolean compressResult=true;
         int BUFFER = 1024*4;
         byte[] B_ARRAY = new byte[BUFFER]; 
         FileInputStream fins=null;
         FileOutputStream fout=null;
         GZIPOutputStream zout=null;
         try{
             File srcFile=new File(inputFileName);
             fins=new FileInputStream (srcFile);
             File tatgetFile=new File(targetFileName);
             fout = new FileOutputStream(tatgetFile);
             zout = new GZIPOutputStream(fout);
             int number = 0; 
             while((number = fins.read(B_ARRAY, 0, BUFFER)) != -1){
                 zout.write(B_ARRAY, 0, number);  
             }
         }catch(Exception e){
             e.printStackTrace();
             compressResult=false;
         }finally{
             try {
                zout.close();
                fout.close();
                fins.close();
            } catch (IOException e) {
                e.printStackTrace();
                compressResult=false;
            }
         }
         return compressResult;
    }

JSONを返しています

response.setHeader("Content-Type", "application/json");
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Vary", "Accept-Encoding");
response.setContentType("application/json");
response.setHeader("Content-Disposition","gzip");
response.sendRedirect(filePathurl);

また

request.getRequestDispatcher(filePathurl).forward(request, response);

以下のように AJAX コードを使用して JSON オブジェクトにアクセスしようとしています。

$.ajax({
    type : 'GET',
    url : url,
    headers : {'Accept-Encoding' : 'gzip'},
    dataType : 'text',

表示される出力は、圧縮解除された JSON 文字列ではなく、バイナリ データです。これを機能させる方法について何か提案はありますか? 私が使用しているブラウザ (IE、Chrome、FF) は gzip をサポートしていることに注意してください。これは、Apache によって gzip されたすべての静的コンテンツが正しくレンダリングされるためです。

4

1 に答える 1

2

以下を使用して:

response.sendRedirect(filePathurl);

別のリクエスト/レスポンスを作成しています。定義したヘッダーは、実際に送信されるファイルに関連付けられなくなります。

リダイレクトを送信するのではなく、ファイルをロードして同じ応答でストリーミングする必要があります。

これを表示するには、Fiddler または別の要求ビューアーを使用します。

于 2013-04-02T15:33:16.657 に答える