`
Luob.
  • 浏览: 1590458 次
  • 来自: 上海
社区版块
存档分类
最新评论

Java Servlet下载文件(简单)

    博客分类:
  • Java
 
阅读更多
package com.bjdata.bjproduct.presentation.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bjdata.bjproduct.common.Constants;
import com.bjdata.bjproduct.persistence.system.model.User;
import com.sun.xml.internal.fastinfoset.stax.events.Util;


public class FileDownload extends HttpServlet {

	private int bufferSize=2048;
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		String bsize=config.getInitParameter("bufferSize");
		if(Util.isEmptyString(bsize)){
			bufferSize=Integer.parseInt(bsize);
		}
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String action="";
		try{
			
			request.setCharacterEncoding("UTF-8");
			response.setContentType("text/html;charset=UTF-8");
			
			String id=request.getParameter("id");
			String company=request.getParameter("company");
			action="/infoManager/getContract.do?id="+id+"&company="+company;
			//文件名必须带后缀名,否则 下载后是未知类型的文件
			String filename=request.getParameter("filename");
			String path = request.getParameter("path");
			
			path=request.getSession().getServletContext().getRealPath("/")+path;
			
			User sessionuser = (User) request.getSession(true).getAttribute(
					Constants.SESSION_USER);
			if(sessionuser!=null){
				//检测文件是否存在
				File file=new File(path);
				
				if(!file.exists()){
					request.setAttribute("msg","<script type=\"text/javascript\">alert(\"指定的文件不存在!\");</script>");
					request.getRequestDispatcher(action).forward(request, response);
				}else{
					response.reset();
					//将 文件流写入到前端浏览器
					response.setHeader("Content-disposition", "attachment;filename="+convertFileName(filename));
					ServletOutputStream sops=response.getOutputStream();
					FileInputStream fis=new FileInputStream(file);
					copyStream(fis,sops,true);
					fis.close();
					sops.close();
					fis=null;
					sops=null;
					file=null;
				}
				
			}
			else{
				//response.sendRedirect("index.jsp");(如果是重定向:index.jsp 中需要通过js控制跳到top.location.href="login.jsp")
//下面实现了 top.location.href="login.jsp" 的效果
				response.getWriter().print("<script type=\"text/javascript\">alert(\"请先登录后再下载!\");top.location.href='/bjproduct/';</script>");
			}
		}catch(Exception e){
			request.setAttribute("msg", "<script type=\"text/javascript\">alert(\"文件下载失败,请稍后再试...\");</script>");
			request.getRequestDispatcher(action).forward(request, response);
			e.printStackTrace();
		}
	}
	/**
	 * 复制流 到 前端浏览器
	 * @param source 源文件输入流
	 * @param dest 输出流
	 * @param flush 
	 * @return
	 */
	private final long copyStream(InputStream source,OutputStream dest,boolean flush){
		int bytes;
		long total=0l;
		byte [] buffer=new byte[bufferSize];
		try {
			while((bytes=source.read(buffer))!=-1){
				if(bytes==0){
					bytes=source.read();
					if(bytes<0)
						break;
					dest.write(bytes);
					if(flush)
					   dest.flush();
					total+=bytes;
				}
				dest.write(buffer,0,bytes);
				if(flush)
					dest.flush();
				total+=bytes;
			}
			
		} catch (IOException e) {
			throw  new RuntimeException("IOException caught while copying.",e);
		}
		return total;
	}
	
	//转换文件名的方法 在strust.xml中会用到  
    public String convertFileName(String cfilename){  
        try {  
        	cfilename=new String(cfilename.getBytes(),"ISO-8859-1");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return cfilename;  
    } 
    
    
}

web.xml
 <!-- filedownload -->
  <servlet>
    <servlet-name>FileDownload</servlet-name>
    <servlet-class>com.bjdata.bjproduct.presentation.servlet.FileDownload</servlet-class>
    <init-param>
    	<param-name>bufferSize</param-name>
    	<param-value>2048</param-value>
    </init-param>
  </servlet>

<servlet-mapping>
    <servlet-name>FileDownload</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>

0
5
分享到:
评论

相关推荐

    java servlet实现文件下载

    Java Servlet是一种Java编程语言...通过这个简单的Java Servlet实现,我们可以为用户提供一个安全、可控的文件下载服务。理解这些基本步骤和相关的HTTP概念,将有助于你更好地设计和实现Web应用程序中的文件下载功能。

    Java Servlet实现在浏览器中打开pdf文件

    以下是一个简单的示例,展示如何创建一个名为`FileDownLoadServlet`的Servlet,用于提供PDF文件下载: 1. 首先,我们需要在Servlet中声明并实现`doGet`方法,这是HTTP GET请求的主要处理点: ```java @Override ...

    servlet 文件上传下载例子

    在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...

    Java(Servlet)上传文件的demo

    本示例"Java(Servlet)上传文件的demo"提供了一个简单的文件上传功能,适用于初学者理解和实践。以下是对这个demo的详细解析: 1. **Servlet基本概念**: Servlet是一个Java类,遵循Servlet API规范,它扩展了...

    Java文件上传servlet接口

    本文将深入探讨如何使用Servlet实现一个简单的文件上传接口,并以JSON格式返回响应数据。 首先,我们需要了解Servlet接口。Servlet是Java编程语言中用于扩展服务器功能的接口,它允许开发者编写代码来处理HTTP请求...

    Java servlet 和 swf上传超大文件源码

    Java Servlet和SWFUpload是两种不同的技术,但它们在处理大文件上传方面有着共同的应用。在Web开发中,用户可能需要上传大文件,如视频、音频或大型文档,这就需要服务器端具有处理大文件上传的能力。Java Servlet是...

    java servlet mysql 简单实例

    在本实例中,我们主要探讨如何使用Java的Servlet技术与MySQL数据库进行交互,这是一个基于DAO(Data Access Object)模式但不使用Bean的简单应用。首先,让我们深入了解一下Servlet、DAO模式以及MySQL数据库的基础...

    java servlet实现上传/下载文件

    servlet实现上传文件和下载文件的方法,在浏览器中输入http://ip:port/servletName?path这种方式将客户端文件上传至服务器端,简单的例子,servletName参照web.xml path参照servlet中写的参数

    java下载类(servlet)

    以下是一个简单的Servlet文件下载示例代码片段: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = "example...

    Java Servlet上传文件

    在提供的文件名列表中,`MoreFileUpLoadServlet.java`和`OneFileUpLoadServlet.java`可能分别代表处理多个文件上传和单个文件上传的Servlet实现。它们可能与上述示例类似,只是在处理多个文件时,会有一个循环来处理...

    java servlet 文件上传

    Java Servlet 文件上传是Web开发中的一个关键功能,它允许用户通过HTTP协议将本地文件传输到服务器。在Java中,我们通常使用Servlet API和第三方库如Apache Commons FileUpload来实现这一过程。Apache Commons ...

    java Servlet学习笔记

    一个简单的Servlet可以记录并展示请求次数,或者返回服务器当前时间,这通常通过实例化Servlet时的成员变量和Java的日期类实现。 二、HTTP协议 2.1 什么是HTTP协议 HTTP(超文本传输协议)是互联网上应用最广泛的一...

    servlet文件下载项目

    总结一下,这个"Servlet文件下载项目"展示了如何使用Servlet技术实现一个简单的文件下载服务。通过理解Servlet的工作原理、HTTP响应头的设置以及Java I/O流的使用,我们可以构建出更复杂、更安全的文件下载系统。这...

    Java Servlet Programming

    - **配置与部署**: Servlet的配置文件(通常为web.xml)定义了Servlet的名称、类名以及其他参数,这些信息用于指导Servlet容器如何加载和管理Servlet实例。 - **请求处理**: Servlet通过`service`方法接收并处理...

    Java Servlet开发与实例

    在web.xml文件中,我们可以通过`&lt;servlet&gt;`和`&lt;servlet-mapping&gt;`元素来配置Servlet。例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;com.example.MyServlet&lt;/servlet-class&gt; ...

    基于Servlet实现文件的上传与下载

    在Java Web开发中,...总的来说,"基于Servlet实现文件的上传与下载"是Java Web开发者必须掌握的一项技能,它有助于理解和实践Web服务的核心机制。通过不断的实践和学习,你可以创建更高效、更安全的文件管理系统。

    java servlet上传下载

    在Java Servlet中,处理文件上传和下载是常见的功能需求。在这个压缩包文件"TestFileUploadAndDownLoad"中,可能包含了实现这些功能的示例代码。 文件上传: 在Java Servlet中,我们通常使用`HttpServletRequest`...

    基于java servlet的题库系统

    【基于Java Servlet的题库系统】是一个非常适合初学者探索Java Web开发基础的项目。这个系统主要依赖于Servlet技术,这是一种用于构建动态Web应用程序的技术,它允许服务器端代码处理客户端的请求并返回响应。在这个...

    Servlet中文件上传和下载

    以下是一个简单的文件下载Servlet示例: ```java @WebServlet("/FileDownloadServlet") public class FileDownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, ...

    servlet实现文件上传下载

    总结来说,实现Servlet文件上传下载需要理解Servlet生命周期、HTTP请求处理、多部分数据解析以及文件I/O操作。Apache Commons FileUpload库简化了这一过程,但理解其背后的原理对于解决可能出现的问题和优化性能至关...

Global site tag (gtag.js) - Google Analytics