欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-13 08:51:39
本文实例为大家分享了java压缩文件和下载图片示例,供大家参考,具体内容如下 主页面index.xml <%@ page language="java...

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

主页面index.xml

<%@ 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
只有被压缩文件足够大,才能抵消压缩开销,有效压缩。否则,很小的文件压缩之后的文件大小反而变大

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目录下面)

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


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。