本文实例为大家分享了java压缩文件和下载图片示例,供大家参考,具体内容如下
主页面index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
< html >
< head >
< title >项目的主页</ title >
</ head >
< body >
< h2 >主页主页</ h2 >
< h2 >湖南长沙</ h2 >
< h3 >发布方式一......</ h3 >
< img src = "images/1.jpg" /> <!-- 相对路径 -->
< br />
<!-- 绝对路径 -->
< a href = "/helloWeb/gzip" >页面内容压缩演示--gzip</ a >< br />< br />
< a href = "down" >下载图片</ a >< br />< br />
</ body >
</ html >
|
压缩文件:GzipServlet.java
只有被压缩文件足够大,才能抵消压缩开销,有效压缩。否则,很小的文件压缩之后的文件大小反而变大
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package cn.hncu.servlet;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GzipServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String str= "vuttyjhgyurc湖南长沙surdivsf安徽芜湖890-80897也许更长v就会习惯这样tvsduvgkjxhvnxzc.nlkcjsdfpeifniuq4ey8f048eyuyli"
+ "skchkxhckxzncnxclkjhasliduhasiduisugdlisgdlkjadhlksjhdlkasjdhasklhdlkjsahashdkskdjhkdjshkldsjhlksjhfkljd" ;
// byte src[]=str.getBytes();//使用平台默认编码(GBK),没有就使用ISO-8859-1
byte src[]=str.getBytes( "utf-8" );
//后台向浏览器发的数据,浏览器不认识--需要下载,用文本打开是乱码。所以要设置协议
ByteArrayOutputStream bOut= new ByteArrayOutputStream(); //内存流
GZIPOutputStream gOut= new GZIPOutputStream(bOut);
gOut.write(src); //把src压到bOut
gOut.close(); //刷缓存
byte dest[]=bOut.toByteArray(); //src==>dest
//总结:输出压缩数据时要设置响应头
resp.setHeader( "Content-Encoding" , "gzip" );
//设置响应头之后,就不用下载,不乱码
resp.setContentType( "text/html;charset=utf-8" ); //一定要把str.getByte设置编码
//当文件很小时:压缩无效果,反而累赘(不能抵消压缩所需要的开销)...较大文件会被压小(一般>200k)
System.out.println( "压缩前的长度:" +src.length);
System.out.println( "压缩后的长度:" +dest.length);
//把压缩之后的数据dest刷出去
OutputStream out=resp.getOutputStream(); //resp.getWriter();
// out.write(src);
out.write(dest);
}
}
|
下载图片:DownServlet .java(图片在src目录下面)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package cn.hncu.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//协议设置1
resp.setContentType( "application/force-download" ); //用默认下载文件的应用程序下载
String fileName= "4.jpg" ;
//如果文件名是中文--如:我的图片.jpg
//fileName=URLEncoder.encode(fileName,"utf-8");//把fileName编码一下,如果不编码,浏览器中显示的文件名会乱码
InputStream in=DownServlet. class .getClassLoader().getResourceAsStream(fileName);
//协议设置2
resp.setHeader( "content-Disposition" , "attachment;filename=\'" +fileName+ "\'" ); //告诉浏览器当前下载的文件名
//DownServlet.class的位置:"D:\apache-tomcat-7.0.30\webapps\helloWeb\WEB-INF\classes\cn\hncu\servlet"
//图片所在的当前位置:"D:\apache-tomcat-7.0.30\webapps\helloWeb\WEB-INF\classes"
//FileInputStream fin=new FileInputStream(fileName);//不可行
OutputStream out=resp.getOutputStream();
byte buf[]= new byte [ 512 ];
int len= 0 ;
// while((len=fin.read(buf))!=-1){
// out.write(buf, 0, len);
// }
while ((len=in.read(buf))!=- 1 ){
out.write(buf, 0 , len);
}
}
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。