首页 > 编程知识 正文

gzip压缩目录命令,gunzip解压

时间:2023-05-05 11:35:03 阅读:17476 作者:3725

在一些留言板、博客等项目中,用户发布的帖子可能文章内容太长。 此时,如果用户的互联网速度差或互联网不稳定,就会面临**响应太慢,发送失败的**情况。 如果网站有自动保存功能,这种情况会明显增加。 此时,只要在本地压缩并上传传输的内容,在服务器上解压缩,就可以处理长文本

实现构想

在前台以本地gzip格式在pako_deflate.js中压缩请求正文

在后台使用Java解压缩请求正文

操作环境

jdk 1.8.0_77

idea 2016.2.1

maven 3.3.9

项目依赖

公共端io-2.5 (简化io操作)

(json-lib-2.4 (处理请求正文中的参数) ) ) ) ) ) ) ) ) ) ) )。

spring-webmvc-4.3.4.RELEASE

pako_deflate-1.0.3.js(js文本压缩工具类) ) ) )。

JS压缩请求正文

因为只需在前台进行压缩,所以只需浏览pako的压缩专用文件pako_deflate.min.js即可

另外,我在项目中主要使用jQuery发送Ajax请求,所以要引入jQuery

将提交的参数转换为JSON字符串

var params=encodeuri component (JSON.stringify ({

标题: '标题',

content: '内容'

();

gip可以大幅压缩请求正文,但如果内容太小,压缩后的内容反而会变大,params.length测试对大于1000的文本可以达到60%以上的压缩效果,因此在压缩前需要判断内容

var params=encodeuri component (JSON.stringify ({

title: title,

内容:内容

();

varcompressbeginlen=params.length;

if(compressbeginlen1000 ) {

压缩JSON字符串

//Pako.gzip(Params )缺省情况下返回uint 8阵列对象。 此时,如果使用Ajax请求,参数将作为数组发送

//要解决此问题,请添加{to: 'string'}参数并返回二进制字符串

Params=Pako.gzip(Params,{to: 'string'};

}

$.Ajax({ ()

url: '/gzip ',

数据:参数、

dataType: 'text ',

类型: '开机自检',

headers: {

如果compressBeginLen大于1000,则标记此请求的参数使用gzip压缩

' content-encoding ' : params.length 1000? ' gzip': ' '

(,

success :功能(data ) {

//dosomething

}

() )

Java解压缩请求正文

首先,取得Content-Encoding请求头,根据该请求头的内容进行逻辑处理

@响应主体

@requestmapping(value='/gzip ' ) )。

公共字符串gzip (httpservletrequestrequest ) {

String params=' ';

try {

获取内容编码请求标头

stringcontentencoding=request.get header (content-encoding );

内容编码!=nullcontentencoding.equals (' gzip ' ) }{

//获取输入流

bufferedreaderreader=request.get reader (;

//将输入流中的请求实体转换为字节数组,并进行gzip解压缩

byte [ ] bytes=I outils.to bytearray (reader,' iso-8859-1 ' );

解压缩bytes序列

params=gzip util.uncompress (bytes );

} else {

bufferedreaderreader=request.get reader (;

params=Ioutils.tostring(reader );

}

if (参数!=null params.trim ().length ) )0) {

//前台对参数进行了url编码,所以在此进行解码

params=URL decoder.decode (params,' utf-8 ';

//将解码的参数转换为json对象

jsonobjectjson=JSON object.from object (params );

从json对象获取参数以进行后续操作

system.out.println (title : (t ) JSON.getstring ) title );

system.out.println (content : (t ' JSON.getstring ) content );

}

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

}

返回参数;

}

//*

gzip格式的byte序列解压缩

* @param bytes gzip格式byte数组

* @param charset字符集

*/

publicstaticstringuncompress (byte [ ] bytes,String charset ) {

if (bytes==null|| bytes.length==0) ) )。

返回空值;

}

bytearrayoutputstreambytearrayoutputstream=null;

bytearrayinputstreambytearrayinputstream=null;

gipinputstreamgzipinputstream=null;

try {

bytearray output stream=newbytearrayoutputstream (;

bytearray inputstream=newbytearrayinputstream;

GIP inputstream=newgzipinputstream (字节输入);

使用//org.Apache.com mons.io.I outils简化流的操作

Ioutils.copy(gzipInputstream,byteArrayOutputStream );

returnbytearrayoutputstream.tostring (charset );

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

} finally {

//释放流资源

I outils.close quietly (gzip inputstream;

I outils.close quietly (bytearray inputstream;

I outils.close quietly (bytearray output stream;

}

返回空值;

}

Jerry Qu还实现了一个服务器使用Node.js解压缩的DEMO,提供了deflate、zlib、gzip三种压缩、解压缩方式

上面的完整代码可以在gzip项目中引用

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。