FTP上传
jsp中使用两个包:
commons-fileupload-1.2.1.jar,commons-io-1.3.jar实现文件上传以及文件下载
2010-08-10 08:42:05| 分类: 编程技巧 | 标签: |字号大中小 订阅
对于上传我们需要导入两个包:commons-fileupload-1.2.1.jar,commons-io-1.4.jar
FileUploadServlet.java(文件上传)
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReq
st;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; //import xby.szu.factory.*;///////插入数据库,这里视你们的情况而定
//import xby.szu.javaBean.*;/////插入数据库,这里视你们的情况而定
p lic class FileUploadServlet extends HttpServlet {
p lic void doGet(HttpServletReq
st req
st, HttpServletResponse response)
throws ServletException, IOException {
final long MAX_SIZE = 1024 * 1024 * 1024;// 设置上传文件最大值
// 允许上传的文件格式的列表
final String[] allowedExt = new String[] { "txt","rar","exe","docx","vsd" };
response.setContentType("text/html");
// 设置字符编码为UTF-8, 统一编码,处理出现乱码问题
response.setCharacterEncoding("UTF-8");
// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
dfif.setRepository(new File(req
st.getRealPath("/") + "Lupload"));// 设置存放临时文件的目录
// ,
// web根目录下的ImagesUploadTemp目录
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
// 设置最大上传大小
sfu.setSizeMax(MAX_SIZE);
PrintWriter out = response.getWriter();
// 从req
st得到所有上传域的列表
List fileList = null;
try {
fileList = sfu.parseReq
st(req
st);
} catch (FileUploadException e) {// 处理文件
尺寸
手机海报尺寸公章尺寸朋友圈海报尺寸停车场尺寸印章尺寸
过大异常
if (e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节
");
out.println("
返回");
return;
}
e.printStackTrace();
}
// 没有文件上传
if (fileList == null || fileList.size() == 0) {
out.println("请选择上传文件
");
out.println("
返回");
return;
}
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {/////////////////////////////////////////////
// //////////////////
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段而不是上传域的文件域(
等)
if (fileItem == null || fileItem.isFormField()) {
contin
;
}
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
if ("".eq ls(path) || size == 0) {
out.println("请选择上传文件
");
out.println("
返回");
return;
}
// 得到去除路径的文件名
String t_name = path.s string(path.lastIndexOf("\\") + 1);
System.out.println(t_name);
// 得到文件的扩展名(无扩展名时将得到全名)
String t_ext = t_name.s string(t_name.lastIndexOf(".") + 1);
// 拒绝接受规定文件格式之外的文件类型
int allowFlag = 0;
int allowedExtCount = allowedExt.length;
for (; allowFlag < allowedExtCount; allowFlag++) {
if (allowedExt[allowFlag].eq ls(t_ext))
break;
}
if (allowFlag == allowedExtCount) {
out.println("请上传以下类型的文件
");
for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
out.println("*." + allowedExt[allowFlag] + " ");
out.println("
返回");
return;
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传后保存的文件名
String prefix = String.val
Of(now);
// 保存的最终文件完整路径,保存在web根目录下的upload目录下
String u_name = req
st.getRealPath("/") + "Lupload/" + prefix+ "." + t_ext;
System.out.println(now);
// 根据原文件名保存文件
String filename = t_name;
//根据时间设定的新文件名
String filenowName = prefix +filename;
String tempFileName="";
//获取当前时间
String nowTime=GetIdTime.getTime();
String filepath="E:\\tomcat 6.x\\apache-tomcat-6.0.26\\webapps\\XBY\\upload\\";
try {
// 保存文件到E:\\tomcat 6.x\\apache-tomcat-6.0.26\\webapps\\XBY\\upload\\目录下
fileItem.write(new File(filepath+ filename));
//插入数据库
// DAOFactory.getBookDAOInstance().insert(filename, filenowName, nowTime, filepath);//这里视你们的情况而
//插入数据库
System.out.println(filename);
out.println(filename+"文件上传成功. 已保存为: " + t_name + " 文件大小: " + size+ "字节
");
//改名操作,避免同名文件上传后被覆盖
tempFileName=filepath+filename;
java.io.File newfile=new java.io.File(tempFileName); /////
newfile.renameTo(new java.io.File(filepath+filenowName));
//改名操作
out.println("
继续上传");
} catch (Exception e) {
e.printStackTrace();
}
}
}
p lic void doPost(HttpServletReq
st req
st, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(req
st, response);
}
}
------------------------------------------------------------------------------------------------------------------------------------------
--------------------------
下载文件的servlet与上面的两个包无关
FileDownloadServlet.java(下载文件)
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReq
st;
import javax.servlet.http.HttpServletResponse; /**
* 下载文件
* @author
*
*/
p lic class FileDownloadServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 8594448765428224944L;
p lic void doGet(HttpServletReq
st req
st, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(req
st, response);
}
/*
* 处理请求
* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletReq
st, javax.servlet.http.HttpServletResponse)
*/
p lic void doPost(HttpServletReq
st req
st, HttpServletResponse response)
throws ServletException, IOException {
//if(req
st.getSession().getAttribute("loginusername")!=null){//我的文件下载功能要求注册用户才能下载,所以加了
这个条件,去掉也行
req
st.setCharacterEncoding("gb2312");
String name = new String(req
st.getParameter("filenowName").getBytes("iso-8859-1"),"gb2312");//这里你们可以根据你们自己所需的//参数自定,我传的是文件的新名字这个参数
System.out.println("dddddddddd:" + name);//测试查看中文会不会乱码
// web绝对路径
String path = req
st.getSession().getServletContext().getRealPath("/");
String savePath = path + "upload";//你们自己定义路径吧
// 设置为下载application/x-download
response.setContentType("application/x-download");
// 即将下载的文件在服务器上的绝对路径
String filenamedownload = savePath + "/" + name;
// 下载文件时显示的文件保存名称
String filenamedisplay = name;
// 中文编码转换
filenamedisplay = URLEncoder.encode(filenamedisplay, "gb2312");
response.addHeader("Content-Disposition", "attachment;filename="
+ filenamedisplay);
try {
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(
filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while ((i = fis.read(b)) > 0) {
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
} catch (Exception e) {
}
/* }else{
response.sendRedirect(req
st.getContextPath()+"/downerror.jsp");
}*/
}
}
uploadBook.jsp(文件上传界面)
<%@ page lang ge="java" import="java.util.*" pageEncoding="gb2312"%>
Book.jsp下载界面部分代码
序号 | 书籍名称(点击下载) | 上传时间 |
序号 | 书籍名称(点击下载) | 上传时间 |
<%
List booklist=DAOFactory.getBookDAOInstance().selectAll();
int d=1;
for(int i=0;i
<%=d%> |
<%=book.getBookrelName() %> |
<%=book.getBooksendTime() %> |
<%
d++;
}
%>