java壓縮文件和下載圖片示例
本文實(shí)例為大家分享了java壓縮文件和下載圖片示例,供大家參考,具體內(nèi)容如下
主頁面index.xml
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <title>項(xiàng)目的主頁</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
只有被壓縮文件足夠大,才能抵消壓縮開銷,有效壓縮。否則,很小的文件壓縮之后的文件大小反而變大
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就會(huì)習(xí)慣這樣tvsduvgkjxhvnxzc.nlkcjsdfpeifniuq4ey8f048eyuyli" +"skchkxhckxzncnxclkjhasliduhasiduisugdlisgdlkjadhlksjhdlkasjdhasklhdlkjsahashdkskdjhkdjshkldsjhlksjhfkljd"; // byte src[]=str.getBytes();//使用平臺(tái)默認(rèn)編碼(GBK),沒有就使用ISO-8859-1 byte src[]=str.getBytes("utf-8"); //后臺(tái)向?yàn)g覽器發(fā)的數(shù)據(jù),瀏覽器不認(rèn)識(shí)--需要下載,用文本打開是亂碼。所以要設(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í)要設(shè)置響應(yīng)頭 resp.setHeader("Content-Encoding", "gzip"); //設(shè)置響應(yīng)頭之后,就不用下載,不亂碼 resp.setContentType("text/html;charset=utf-8");//一定要把str.getByte設(shè)置編碼 //當(dāng)文件很小時(shí):壓縮無效果,反而累贅(不能抵消壓縮所需要的開銷)...較大文件會(huì)被壓小(一般>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目錄下面)
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編碼一下,如果不編碼,瀏覽器中顯示的文件名會(huì)亂碼 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í)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)銀行ATM管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)銀行ATM管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Mybatis輸入輸出映射及動(dòng)態(tài)SQL Review
這篇文章主要介紹了Mybatis輸入輸出映射及動(dòng)態(tài)SQL Review,需要的朋友可以參考下2017-02-02Java使用JDBC實(shí)現(xiàn)Oracle用戶認(rèn)證的方法詳解
這篇文章主要介紹了Java使用JDBC實(shí)現(xiàn)Oracle用戶認(rèn)證的方法,結(jié)合實(shí)例形式分析了java使用jdbc實(shí)現(xiàn)數(shù)據(jù)庫連接、建表、添加用戶、用戶認(rèn)證等操作流程與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08Spring?Boot攔截器和監(jiān)聽器實(shí)現(xiàn)對請求和響應(yīng)處理實(shí)戰(zhàn)
這篇文章主要介紹了Spring?Boot攔截器和監(jiān)聽器實(shí)現(xiàn)對請求和響應(yīng)處理實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Spring?Boot?+?Spring?Batch?實(shí)現(xiàn)批處理任務(wù)的詳細(xì)教程
這篇文章主要介紹了Spring?Boot+Spring?Batch實(shí)現(xiàn)批處理任務(wù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08如何使用stream從List對象中獲取某列數(shù)據(jù)
這篇文章主要介紹了如何使用stream從List對象中獲取某列數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12