java压缩文件和下载图片示例

网友投稿 254 2023-07-03


java压缩文件和下载图片示例

本文实例为大家分享了java压缩文件和下载图片示例,供大家参考,具体内容如下

主页面index.xml

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


页面内容压缩演示--gzip

下载图片

压缩文件: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就会习惯这样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("tiOKfddfIhEext/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目录下面)

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);

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Bootstrap轮播插件使用代码
下一篇:Java 模拟银行自助终端系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~