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