本文實例為大家分享了java壓縮文件和下載圖片示例,供大家參考,具體內(nèi)容如下
主頁面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 >發(fā)布方式一......</ h3 > < img src = "images/1.jpg" /> <!-- 相對路徑 --> < br /> <!-- 絕對路徑 --> < a href = "/helloWeb/gzip" >頁面內(nèi)容壓縮演示--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就會習(xí)慣這樣tvsduvgkjxhvnxzc.nlkcjsdfpeifniuq4ey8f048eyuyli" + "skchkxhckxzncnxclkjhasliduhasiduisugdlisgdlkjadhlksjhdlkasjdhasklhdlkjsahashdkskdjhkdjshkldsjhlksjhfkljd" ; // byte src[]=str.getBytes();//使用平臺默認(rèn)編碼(GBK),沒有就使用ISO-8859-1 byte src[]=str.getBytes( "utf-8" ); //后臺向瀏覽器發(fā)的數(shù)據(jù),瀏覽器不認(rèn)識--需要下載,用文本打開是亂碼。所以要設(shè)置協(xié)議 ByteArrayOutputStream bOut= new ByteArrayOutputStream(); //內(nèi)存流 GZIPOutputStream gOut= new GZIPOutputStream(bOut); gOut.write(src); //把src壓到bOut gOut.close(); //刷緩存 byte dest[]=bOut.toByteArray(); //src==>dest //總結(jié):輸出壓縮數(shù)據(jù)時要設(shè)置響應(yīng)頭 resp.setHeader( "Content-Encoding" , "gzip" ); //設(shè)置響應(yīng)頭之后,就不用下載,不亂碼 resp.setContentType( "text/html;charset=utf-8" ); //一定要把str.getByte設(shè)置編碼 //當(dāng)文件很小時:壓縮無效果,反而累贅(不能抵消壓縮所需要的開銷)...較大文件會被壓小(一般>200k) System.out.println( "壓縮前的長度:" +src.length); System.out.println( "壓縮后的長度:" +dest.length); //把壓縮之后的數(shù)據(jù)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 { //協(xié)議設(shè)置1 resp.setContentType( "application/force-download" ); //用默認(rèn)下載文件的應(yīng)用程序下載 String fileName= "4.jpg" ; //如果文件名是中文--如:我的圖片.jpg //fileName=URLEncoder.encode(fileName,"utf-8");//把fileName編碼一下,如果不編碼,瀏覽器中顯示的文件名會亂碼 InputStream in=DownServlet. class .getClassLoader().getResourceAsStream(fileName); //協(xié)議設(shè)置2 resp.setHeader( "content-Disposition" , "attachment;filename=\'" +fileName+ "\'" ); //告訴瀏覽器當(dāng)前下載的文件名 //DownServlet.class的位置:"D:\apache-tomcat-7.0.30\webapps\helloWeb\WEB-INF\classes\cn\hncu\servlet" //圖片所在的當(dāng)前位置:"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); } } } |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。