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

 更新时间:2016年10月11日 11:12:01   作者:xanlv  
这篇文章主要为大家详细介绍了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);
    }
  }


}

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

相关文章

  • Springboot项目监听器失效问题解决

    Springboot项目监听器失效问题解决

    这篇文章主要介绍了Springboot项目监听器失效问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot中Controller参数与返回值的用法总结

    SpringBoot中Controller参数与返回值的用法总结

    这篇文章主要介绍了SpringBoot中Controller参数与返回值的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java多线程之读写锁分离设计模式

    Java多线程之读写锁分离设计模式

    这篇文章主要介绍了Java多线程读写锁分离设计模式,主要利用Java到吗完成read read 并行化、read write 不允许、write write 不允许几项任务,需要的朋友可以参考一下
    2021-10-10
  • Java内部类的实现原理与可能的内存泄漏说明

    Java内部类的实现原理与可能的内存泄漏说明

    这篇文章主要介绍了Java内部类的实现原理与可能的内存泄漏说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Java 输入输出 IO NIO AIO三兄弟对比分析对比分析

    Java 输入输出 IO NIO AIO三兄弟对比分析对比分析

    这篇文章主要为大家介绍了Java 输入输出 IO NIO AIO三兄弟对比分析对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 从零实现一个简单的Spring Bean容器的代码案例

    从零实现一个简单的Spring Bean容器的代码案例

    Spring是一个非常流行的Java Web开发框架,它提供了强大的依赖注入、面向切面编程、声明式事务管理等功能,为开发者提供了高效、快速地构建Web应用程序的工具,在这篇文章中,咱们将一步一步地构建一个简单的SpringBean容器,需要的朋友可以参考下
    2023-06-06
  • SpringBoot中application.properties、application.yaml、application.yml区别

    SpringBoot中application.properties、application.yaml、applicati

    本文主要介绍了SpringBoot中application.properties、application.yaml、application.yml区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • 关于@GetMapping和@GetMapping(value=““)的区别

    关于@GetMapping和@GetMapping(value=““)的区别

    这篇文章主要介绍了关于@GetMapping和@GetMapping(value=““)的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • java常见报错及解决方案总结

    java常见报错及解决方案总结

    这篇文章主要介绍了Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常、死锁和类未找到异常,文中通过代码将解决方案介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • Java中super关键字详解

    Java中super关键字详解

    这篇文章主要为大家详细介绍了Java中super关键字,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论