利用commons-fileupload以及commons-io包,实现文件的上传与下载。附上主要的代码:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.zxw.fileupdown.DB;
import com.zxw.fileupdown.InsertInfo;
import java.sql.*;
import java.util.Iterator;
import java.util.List;
public class UploadServlet extends HttpServlet {
public UploadServlet() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
DiskFileItemFactory disk = new DiskFileItemFactory();
disk.setSizeThreshold(1024 * 5);//设置上传缓冲区容量为5k
String servletPath = this.getServletContext().getRealPath("/");//获得服务器所在地址
String tempFile = "tempFile";
String path = servletPath + tempFile;
File file = new File(path);
if(!file.exists()) {
file.mkdirs();
}
disk.setRepository(file);
long maxsize = 1024 * 1024 * 5;
//创建能够解析上传文件的二进制流的类
ServletFileUpload sfu = new ServletFileUpload(disk);
sfu.setSizeMax(maxsize);//限制最大上传容量为5M
List<FileItem> list = null;
try {
list = sfu.parseRequest(request);
} catch (FileUploadException e) {
out.println("<script language='javascript'>");
out.println("alert('上传文件失败')");
out.println("</script>");
}
Iterator it = null;;
try {
it = list.iterator();
} catch(NullPointerException e) {
out.println("<script language='javascript'>");
out.println("alert('不支持你所上传文件的类型')");
out.println("</script>");
} finally {
response.sendRedirect("upload.html");
}
if(it != null) {
int n = 0;
while(it.hasNext()) {
FileItem fileItem = (FileItem)it.next();
if(!fileItem.isFormField()) { //为文件上传域
String locPath = fileItem.getName();
if(!locPath.equals("")) {
Boolean isSuc = false;
//获得上传文件名
int in = locPath.lastIndexOf("\\");
String filename = locPath.substring(in + 1);
long filesize = fileItem.getSize();
String filepath = tempFile;
//绝对路径
String absoPath = path + "\\" + filename;
File f = new File(absoPath);
FileOutputStream fos = new FileOutputStream(f, true);
if(fileItem.isInMemory()) {
try {
fos.write(fileItem.get());
out.println("<script language='javascript'>");
out.println("alert('上传文件成功')");
out.println("</script>");
isSuc = true;
++n;
//response.sendRedirect("upload.html");
} catch(IOException e) {
out.println("<script language='javascript'>");
out.println("alert('上传文件失败')");
out.println("</script>");
} finally {
fos.close();
//response.sendRedirect("download.jsp");
}
} else {
InputStream is = null;
try {
is = fileItem.getInputStream();
int i = -1;//文件是否读完标志
byte[] b = new byte[1024];
i = is.read(b);
while(i > 0) {
fos.write(b, 0, i);
i = is.read(b);
}
out.println("<script language='javascript'>");
out.println("alert('上传文件成功')");
out.println("</script>");
isSuc = true;
++n;
} catch(IOException e) {
out.println("<script language='javascript'>");
out.println("alert('上传文件失败')");
out.println("</script>");
} finally {
is.close();
fos.flush();
fos.close();
//response.sendRedirect("download.jsp");
}
}
if(isSuc) {
InsertInfo insert = new InsertInfo();
insert.insert(filename, filepath, filesize);
}
}
}
}
}
out.flush();
out.close();
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
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 {
public DownServlet() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.reset();
response.setContentType("application/x-download");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
String name = request.getParameter("filename");
String filename = new String(name.getBytes("ISO-8859-1"), "utf-8");//转码
String servletPath = this.getServletContext().getRealPath("/");
String path = "" + servletPath + "tempFile" + "\\" + filename;
File file = new File(path);
InputStream is = new FileInputStream(file);
OutputStream os = response.getOutputStream();
response.addHeader("Content-Disposition", "attachment:filename=" + URLEncoder.encode("" + filename));
response.addHeader("Content-Length", (new Long(file.length())).toString());
int i = -1;
byte b[] = new byte[1024];
i = is.read(b);
while(i != -1) {
os.write(b, 0, i);
i = is.read(b);
}
is.close();
os.flush();
os.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
以上两个分别是处理文件上传和文件下载的servlet。
一下是效果图:
其他资源请在这里下载。
commons-fileupload包请在这里下载。