JSP第四章
本章学习要点:
上传
下载
上传
1)添加jar(commons-fileupload.jar,commons-io.jar)
2)表单的提交方式是post ,内容 enctype=”multipart/form-data”
3)获取服务器路径
String serverPath = session.getServletContext().getRealPath(“/upload”);
4)创建文件夹
File filePath = new File(serverPath);
//判断创建
if (!filePath.exists()) {
filePath.mkdir();
}
5)获得文件列表工厂对象
FileItemFactory factory = new DiskFileItemFactory();
6)获得上传对象
ServletFileUpload upload = new ServletFileUpload(factory);
List list = null;
//保存上传的文件名////////////////////////
List fileNames =new ArrayList();
6)设置文件及所有文件大小
try {
//单个文件的限制大小 1024=1k 100kb
//upload.setFileSizeMax(1024 * 100);
//所有文件的限制大小 2M=2*1024*1024
upload.setSizeMax(500 * 1024);
7)//判断enctype类型
if (ServletFileUpload.isMultipartContent(request)) {
获得文件列表
list = upload.parseRequest(request);
.遍历数据
for (FileItem item : list) {
判断是否是普通字段
if (item.isFormField()) {
name=”udis”
System.out.println(item.getFieldName() + “=”
+ item.getString(“utf-8”));
+ } else {
//获得上传的文件名
String upString = item.getName();
//保存////////////////////
fileNames.add(upString);
//////////////////////////
//写入
File saveFile = new File(filePath, upString);
item.write(saveFile);
}
}
} else {
out.println(“您上传的内容类型不符合要求:【 multipart/form-data 】”);
}
//跳转到down.jsp页面/////////////////////////
request.setAttribute(“fileNames”, fileNames);
request.getRequestDispatcher(“down.jsp”).forward(request, response);
/////////////////////////////////////////////
} catch (FileSizeLimitExceededException ex) {
out.println(“单个文件大小超过它的范围” + ex.toString());
} catch (FileUploadBase.SizeLimitExceededException e1) {
out.println(“总文件大小超过它的范围” + e1.toString());
}
下载
1)获取服务器路径
String fileDir = session.getServletContext().getRealPath(“/upload”);
2)获得表单提交的数据
String aFileName = request.getParameter(“fileName”);
String online = request.getParameter(“online”);
3)判断
boolean isOnLine = (online != null) ? true : false;
4)文件输入流
FileInputStream in = null;
输出流
ServletOutputStream outs = null;
try {
if (isOnLine) { //直接打开
URL u = new URL("file:///" + fileDir + aFileName);
response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition",
"inline; filename=" + aFileName);
} else { //下载
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition",
"attachment; filename=" + aFileName);
}
//文件流对象
in = new FileInputStream(fileDir + "\\" + aFileName);
outs = response.getOutputStream();
//读取数据
int aRead = 0;
while ((aRead = in.read()) != -1 & in != null) {
outs.write(aRead); //写入
}
outs.flush(); //刷新
// java.lang.IllegalStateException: getOutputStream() has already been called for this response
out.clear();
out = pageContext.pushBody();
} catch (Throwable e) {
e.printStackTrace();
} finally {
try {
in.close(); //关闭流
outs.close();
} catch (Throwable e) {
e.printStackTrace();
}
}
%>