`
hunray
  • 浏览: 221068 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

【转】java文件下载

    博客分类:
  • Java
阅读更多
public HttpServletResponse download(String path, HttpServletResponse response) {
        try {
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }


下载到本地
public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {
        // 下载本地文件
        String fileName = "Operator.doc".toString(); // 文件的默认保存名
        // 读到流中
        InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径
        // 设置输出的格式
        response.reset();
        response.setContentType("bin");
        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        // 循环取出流中的数据
        byte[] b = new byte[100];
        int len;
        try {
            while ((len = inStream.read(b)) > 0)
                response.getOutputStream().write(b, 0, len);
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


下载网络文件
public void downloadNet(HttpServletResponse response) throws MalformedURLException {
        // 下载网络文件
        int bytesum = 0;
        int byteread = 0;

        URL url = new URL("windine.blogdriver.com/logo.gif");

        try {
            URLConnection conn = url.openConnection();
            InputStream inStream = conn.getInputStream();
            FileOutputStream fs = new FileOutputStream("c:/abc.gif");

            byte[] buffer = new byte[1204];
            int length;
            while ((byteread = inStream.read(buffer)) != -1) {
                bytesum += byteread;
                System.out.println(bytesum);
                fs.write(buffer, 0, byteread);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


在线打开文件的一种方式
public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {
        File f = new File(filePath);
        if (!f.exists()) {
            response.sendError(404, "File not found!");
            return;
        }
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
        byte[] buf = new byte[1024];
        int len = 0;

        response.reset(); // 非常重要
        if (isOnLine) { // 在线打开方式
            URL u = new URL("file:///" + filePath);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
            // 文件名应该编码成UTF-8
        } else { // 纯下载方式
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());
        }
        OutputStream out = response.getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);
        br.close();
        out.close();
    }


参考了上面写的:
package com.talkweb.qmessage.service.servlet;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.talkweb.qmessage.service.QmessageManager;
 

public class QmessageServlet extends HttpServlet{
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 		
		String message = new String(request.getParameter("content").getBytes("ISO8859-1"));
		ServletContext application;   
        WebApplicationContext wac;   
        application = getServletContext();   
        wac = WebApplicationContextUtils.getWebApplicationContext(application);//获取spring的context   
        QmessageManager qmessageManager = (QmessageManager) wac.getBean("QmessageManager");   //获取spring的bean
        
        String StringXML = qmessageManager.getGifXML(message);
        String StringURL = qmessageManager.getGifURL(StringXML);
        if(StringURL!=""){
        	//更新数据库,并返回唯一标识(主键)
        	String resultId = qmessageManager.updateDB(message,StringXML);        
	        //清空response   
	        response.reset();   
	        //加入属性
	        InputStream in =PropertyUtils.class.getClassLoader().getResourceAsStream("static_config.properties");
			Properties properties = new Properties();
			properties.load(in);
			String service_no = properties.getProperty("SERVICE-NO");
			response.addHeader("service_no", service_no);
			response.addHeader("auth_code", resultId);
	        //写入文件流   
        	int bytesum = 0;   
            int byteread = 0;  
	        URL url = new URL(StringURL);   
	        URLConnection conn = url.openConnection();   
	        InputStream inStream = conn.getInputStream();   
	        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());  
	        //得到文件长度
	        byte[] buffer = new byte[2048];     
            while ((byteread = inStream.read(buffer)) != -1) {   
                bytesum += byteread;   
                toClient.write(buffer, 0, byteread);   
            }     
            inStream.close();
	        response.addHeader("Content-Length", "" + bytesum);  
	        response.setContentType("image/gif"); 
	        toClient.flush();   
	        toClient.close();   
        }
	}
}
分享到:
评论

相关推荐

    java 文件转 Base64 工具类

    java 文件转 Base64 工具类 java 文件转 Base64 工具类java 文件转 Base64 工具类 java 文件转 Base64 工具类java 文件转 Base64 工具类 java 文件转 Base64 工具类java 文件转 Base64 工具类 java 文件转 Base64 ...

    VUE + java 文件下载

    实现在浏览器前端点击后的文件下载。 不是整个工程代码,只把涉及到下载用的前端的代码和后端的代码贴出来了,可以直接复制使用,有详细的步骤。 包含了前端在执行post请求的关键的参数哦!responseType: "blob

    Java反编译工具把.class文件转换为.java文件

    ### Java反编译工具:将.class文件转换为.java文件 #### 概述 在软件开发领域,有时我们可能需要分析第三方库或者开源项目的内部结构,这时就需要借助于反编译工具来帮助我们阅读和理解其源码。Java作为一种广泛...

    Java转Pas文件官方工具(delphi的Pas文件)

    在这个场景下,"Java转Pas文件官方工具"是为了帮助开发者将Java源代码转换成Delphi可读的PAS文件。 Java源代码文件通常以`.java`为扩展名,经过编译后生成`.class`文件,这些类文件可以被Java虚拟机执行。然而,...

    java URL转PDF文件

    在Java编程环境中,将一个URL链接的内容转换为PDF文件是一个常见的需求,这通常涉及到网络请求、HTML解析以及PDF生成等多个步骤。以下是一个详细的步骤指南,涵盖了这个过程中的关键知识点: 首先,我们需要处理URL...

    Java文件下载相关资料搜集

    Java文件下载是Web开发中的一个常见任务,涉及到服务器与客户端之间的数据传输。在这个主题中,我们主要探讨Java中实现文件下载的各种方法和技术要点。 首先,Java文件下载的基本流程包括:客户端发起请求,服务器...

    java文件下载

    ### Java文件下载技术详解 在Java开发中,文件下载是一个常见的需求,特别是在Web应用中,用户经常需要从服务器下载各种类型的文件,如文档、图片、视频等。本文将基于提供的标题“java文件下载”和描述“java实现...

    java实现文字转语音文件和朗读

    java实现文字转语音文件和朗读功能,还要下载jacob-1.17-M2.rar文件。将jacob.jar导入java项目中,64bit就将jacob-1.18-x64.dll放入System32目录下;32bit就将jacob-1.18-x86.dll放入System32目录下。

    java使用itext实现pdf文件下载

    在Java开发中,生成和处理PDF文档是一项常见的需求。Itext是一个强大的库,它允许开发者在Java环境中创建、编辑和修改PDF文档...通过实践和理解这些示例,你将能够熟练地在Java项目中运用Itext处理PDF文件的下载需求。

    java实现文件加密解密

    "java实现文件加密解密" Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,...

    JAVA本地文件下载

    ### JAVA本地文件下载知识点 #### 一、概述 在Java编程中,经常需要处理文件的上传与下载。本文档将详细介绍如何使用Java实现基于HTTP协议的本地文件下载功能。主要聚焦于通过文件名及文件的全路径来实现本地文件...

    java反编译工具(.class文件反编译成.java文件)

    Java反编译是将已编译的字节码(.class文件)转换回源代码(.java文件)的过程,这对于理解和学习已有的Java程序、逆向工程或调试都是很有用的。标题提到的"java反编译工具"是用于这个目的的软件,它能够帮助开发者...

    Java多个文件根据URL下载后打包zip导出.zip

    另外,`java.nio`包中的`Channels`和`Buffers`可以提高大文件下载的效率。 2. **文件I/O操作**:下载的数据需要保存到本地文件系统。Java的`java.io.File`类用于文件操作,如创建、读写和删除。`FileOutputStream`...

    java实现下载例子

    这个例子展示了如何使用Java和JSP(JavaServer Pages)技术来创建一个简单的文件下载服务。以下是对给定代码的详细解释: 1. **字符编码转换**: 在处理中文文件名时,需要考虑字符编码的问题。在`toUtf8String()`...

    在java程序中实现wav文件转MP3

    在Java编程环境中,将WAV音频文件转换为MP3格式是一项常见的需求,特别是在处理音频数据时。本示例介绍如何利用LAME库在Java程序中实现这个功能,并且能够自定义MP3文件的码率。LAME是一个高效的MP3编码器,广泛用于...

    java使用HttpClient通过url下载文件到本地

    在Java编程环境中,HttpClient库是Apache HTTP Components项目的一部分,它为开发者提供了强大的HTTP客户端功能,可以...通过理解HttpClient的工作原理和提供的API,开发者可以构建出稳定、高效的文件下载解决方案。

    java URL转PDF文件(完美支持中文)

    "java URL转PDF文件(完美支持中文)"的主题着重于如何利用Java库来实现这一功能,并且确保中文字符能够正确显示。在Linux环境下,由于字符编码的问题,中文字符可能会出现乱码,但通过特定的方法和库可以解决这个问题...

    Java文件上传下载实例(含详细注释)

    以下是关于"Java文件上传下载实例(含详细注释)"的详细知识点解析: 1. **Servlet与JSP**: - Java文件上传通常涉及到Servlet技术,Servlet是Java为HTTP协议提供的一种服务端接口,用于处理客户端(浏览器)的请求...

    Java实现文件下载并解决中文文件名乱码

    ### Java实现文件下载并解决中文文件名乱码 在日常的Web开发中,经常会遇到需要让用户下载文件的需求,尤其是在企业级应用中。然而,在实际操作过程中可能会遇到一个常见问题:当文件名包含中文字符时,下载后的...

Global site tag (gtag.js) - Google Analytics