您的位置:首页 > 其它

使用commons-fileupload进行文件上传

2014-05-13 19:19 423 查看
1、创建文件上传页面,示例index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>文件上传</title>
</head>

<body>
<h1 style="color: red;">${message}</h1>
<form action="upload" method="post" enctype="multipart/form-data" >
<input name="username" value="张三" type="text"/>
<input name="password" value="123" type="text"/>
<input name="file" type="file"/>
<input value="上传文件" type="submit"/>
</form>
<c:if test="${formMessage!=null}">
用户名:${formMessage.username}<br/>
密 码:${formMessage.password}
</c:if>
</body>
</html>
转载请注明来源:http://blog.csdn.net/zgs_shmily

2、创建文件上传Servlet,示例Upload.java
package control;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* 使用commons-fileupload进行文件上传
* @since 2014/05/13
* @version 1.0
* @author Shmily
*/
public class Upload extends HttpServlet {
private static final long serialVersionUID = 7571116824239020215L;
//允许上传的文件类型
private List<String> fileExt=Arrays.asList(".doc",".docx",".rar",".txt");

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

try {
// 创建一个解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 得到解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 解决文件名为中文乱码的文件
upload.setHeaderEncoding("utf-8");
// 设置上传文件的最大值
upload.setFileSizeMax(1024 * 1024);
//获取表单中所有字段的值
List<FileItem> list = upload.parseRequest(request);
//存储表单中文本数值
Map<String,Object> formItem=new HashMap<String,Object>();
for(FileItem item:list){
if(!item.isFormField()){//表单中的文件
//获取文件后缀名
String ext=item.getName().substring(item.getName().lastIndexOf("."));
System.out.println("ext:"+ext);
if(!fileExt.contains(ext)){
request.setAttribute("message", "文件类型不对");
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}else{
//文件的存储路径
String filePath=this.getServletContext().getRealPath("/upload");
System.out.println("filePath:"+filePath);
//构建服务器端的文件
File temp=new File(filePath+"/"+System.currentTimeMillis()+ext);
//写文件到服务器端创建的新文件中
item.write(temp);
}
}else{//表单中的普通值
System.out.println("field:"+item.getFieldName()+",value:"+ item.getString("utf-8"));
formItem.put(item.getFieldName(), item.getString("utf-8"));
}
}
request.setAttribute("message", "文件上传成功");
request.setAttribute("formMessage", formItem);
request.getRequestDispatcher("/index.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
}
转载请注明来源:http://blog.csdn.net/zgs_shmily
转载请注明来源:http://blog.csdn.net/zgs_shmily
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: