使用AJAX加载GZIP JSON文件

Loading GZIP JSON file using AJAX

本文关键字:JSON 文件 GZIP 加载 AJAX 使用      更新时间:2023-09-26

我已经gzip json文件使用以下算法(从:java gzip可以't保持原始文件's扩展名)

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正确呈现的。

使用:

response.sendRedirect(filePathurl);

您正在创建另一个请求/响应。您定义的头不再与实际发送的文件相关联。

不需要发送重定向,而是需要加载文件并在相同的响应中流式传输。

使用Fiddler或其他请求查看器查看