您的位置:首页 > 其它

使用commons-fileupload完成资源向服务器的上传

2017-08-07 16:17 447 查看
注意:commons-fileupload依赖于commons-io。

package cn.yellowimg.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

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.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import cn.yellowimg.Utils.CommonUtils;

public class Upload2Servlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

// 创建工厂对象 设置缓存大小与临时目录 20kB
DiskFileItemFactory factory = new DiskFileItemFactory(20 * 1024,
new File("D:/tmp"));
//得到解析器
ServletFileUpload fileUpload = new ServletFileUpload(factory);

/*
* 限制单个文件的大小为100KB 必须在解析之前调用 也就parseRequest方法之前调用
*
* 如果上传文件超出限制 则parseRequest抛出异常
*/
// fileUpload.setFileSizeMax(100*1024);

/*
* 限制整个文件表单的大小
*/

try {
//解析器解析request
List<FileItem> list = fileUpload.parseRequest(request);
FileItem file1 = list.get(1);

//要求保存到根目录下
// 得到根目录
String root = request.getServletContext().getRealPath(
"/WEB-INF/files");

/*
* 生成两级目录
*
* 1 得到文件名称
* 2 得到hashcode
* 3 转换成16进制
* 4 获取前两个字母
*/
String filename = file1.getName();
/*
* 处理文件名的绝对路径
*/
int index = filename.lastIndexOf("\\");

if (index > 0) {
filename = filename.substring(index + 1);
}
/*
* 给文件名加上uuid 处理文件同名问题
*/
filename = CommonUtils.uuid() + "_" + filename;

/*
* 1 得到HashCode
*/
int hashCode = filename.hashCode();

String hex = Integer.toHexString(hashCode);

/*
*
* 获取hex前两个字母 与root链在一起 生成一个完整的路径
*/
File dirFile = new File(root, "/" + hex.charAt(0) + "/"
+ hex.charAt(1));

/*
* 创建目录链
* 若目录存在在不创建 不存在则创建
*/
dirFile.mkdirs();

File destFile = new File(dirFile, filename);

/*
* 保存
*/
try {
file1.write(destFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (FileUploadException e) {
if (e instanceof FileSizeLimitExceededException) {
request.setAttribute("msg", "文件大小超出限制100KB");
request.getRequestDispatcher("/form3.jsp").forward(request,
response);
}
}
}

}


提交表单

<form action="<c:url value='/Upload2Servlet '/>" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="username"><br>
照片:<input type="file" name="picture"><br>
<input type="submit" value="上传">
</form>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: