使用Java技术实现文件的上传和下载,需要借助输入、输出流类实现,比较复杂。而借助一些可以完成上传、下载的组件则可以简单完成,而且效率比较高。

  Cos是一个性能优良的上传、下载组件,非常容易实现文件的上传、下载功能。要使用它首先从网上下载cos.jar并导入工程lib目录下,不过,Cos已经很多年没有更新了。

目录

  一、文件上传的实现

二、文件下载的实现

三、文件上传下载实例


  一、文件上传的实现

  1.要实现文件的上传,需要获取要上传的文件。另外,需要指明上传文件所存放到服务器的位置。通常需要两个组件完成:一个jsp文件负责提交文件,一个servlet类负责实现上传并保存上传文件。

  2.在jsp文件中表单的method属性为post,enctype属性的值必须设置为multipart/form-data,a05a_1为上传到的servlet地址。

  3.在servlet类中,saveDirectory是上传到服务器的路径,maxPostSize是上传大小限制,以字节为单位。如果上传文件重名,默认会覆盖原先的文件。

  4.要获取上传的文件和表单的其他元素的信息,可以借助MultipartRequest类型的对象multi。

二、文件下载的实现

  1.要实现文件的下载,需要获取要下载的文件。另外,需要指明下载文件所存放到服务器的位置。通常需要两个组件完成:一个jsp文件负责获取文件,一个servlet类负责实下载并将文件保存在本地。

  2.对于文件的位置和名称通常在servlet类中直接设置即可,因为是要在服务器上下载,服务器是不会允许你访问每个文件的,通常是特定的那一个文件。

  3.将编码格式设置为iso-8559-1。

三、文件上传下载实例

  四个文件,两个jsp文件,两个servlet文件,跟以上两部分的功能一致

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
<p>文件上传</p>
<hr>
<%request.setCharacterEncoding("UTF-8"); %>
<form method="post" action="../a05a_1" enctype="multipart/form-data">
<table>
<tr><td><input type="file" name="file1" contenteditable="false" onclick="info.innerHTML=''"/></td>
<td><input type="submit" value="上传"/></td></tr>
</table>
</form>
<div id="info">${message}</div>
</body>
</html>
package a05a;

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;

/**
 * Servlet implementation class a05a_1
 */
@WebServlet("/a05a_1")
public class a05a_1 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public a05a_1() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		String requestip=request.getRemoteAddr();
		String saveDirectory=this.getServletContext().getRealPath("")+"\\upload";
		File savedir=new File(saveDirectory);
		if(!savedir.exists())//如果目录不存在,则创建它
		{
			savedir.mkdirs();
		}
		int maxPostSize=5*1024*024;//上传大小限制5MB
		MultipartRequest multi;
		multi=new MultipartRequest(request, saveDirectory, maxPostSize, "UTF-8");
		Enumeration<String> files=multi.getFileNames();
		String name=files.nextElement();
		File f=multi.getFile(name);
		if(f!=null)
		{
			String fileName=f.getName();
			File sServerFile=new File(saveDirectory+"\\"+requestip+"-"+fileName);
			if(sServerFile.exists())//如果存在重名文件,将原先文件删除
			{
				sServerFile.delete();
			}
			f.renameTo(sServerFile);//重命名文件
			String message="文件上传成功,文件名为"+requestip+"-"+fileName;
			request.setAttribute("message", message);
		}
		request.getRequestDispatcher("/a05a/a05a_3.jsp").forward(request, response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件下载</title>
</head>
<body>
<p>文件下载</p>
<hr>
<%request.setCharacterEncoding("UTF-8"); %>
<form method="post" action="../a05a_2">
<table>
<tr><td>文件路径</td><td><input name="lujing"></td></tr>
<tr><td>文件名</td><td><input name="name"/></td></tr>
<tr><td><input type="submit" value="下载"/></td><td><input type="reset" value="取消"/></td></tr>
</table>
</form>
<div id="info">${message}</div>
</body>
</html>
package a05a;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.ServletUtils;

/**
 * Servlet implementation class a05a_2
 */
@WebServlet("/a05a_2")
public class a05a_2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public a05a_2() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		String filepath=request.getParameter("lujing");
		String filename=request.getParameter("name");
		String guessCharest="UTF-8";
		String isofilename=new String(filename.getBytes(guessCharest),"iso-8859-1");
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Disposition", "attachment;filename="+isofilename);
		ServletOutputStream out=null;
		out=response.getOutputStream();
		ServletUtils.returnFile(filepath+filename, out);//下载文件
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}