一.Controller 代码
/**
* 上传表单文件* @param request
* @param response
* @param modelMap
* @throws IOException
* 创建人:cj
* 创建时间:2012-8-16 上午10:11:38
*/
@RequestMapping("/file")
public void upload(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String projectAbsolutePath = request.getRealPath("/");
final long MAX_SIZE = 20 * 1024 * 1024;// 设置上传文件最大为20M
response.setContentType("text/html");
// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(40960);// 设置上传文件时用于临时存放文件的内存大小,这里是4M.多于的部分将临时存在硬盘
dfif.setRepository(new File(request.getRealPath("/") + "/WEB-INF/uploadtemporaryfile"));// 设置存放临时文件的目录,web根目录下的uploadtemporaryfile目录
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
sfu.setHeaderEncoding("UTF-8");
// 设置最大上传尺寸
sfu.setSizeMax(MAX_SIZE);
// 从request得到 所有 上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (Exception e) {
log.info("上传文件有错误" + e);
}
// 过滤掉的文件类型
String[] errorType = { "exe", "com", "cgi", "asp", "bak" };
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
String fileencode = filechar.guestFileEncoding(fileItem);
if ("UTF-8".equals(fileencode) || "utf-8".equals(fileencode)) {
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
// 得到去除路径的文件名
String t_name = path.substring(path.lastIndexOf("\\") + 1);
// 得到文件的扩展名(无扩展名时将得到全名)
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
for (int temp = 0; temp < errorType.length; temp++) {
if (t_ext.equals(errorType[temp])) {
response.getWriter().write(ErrJsonUitl.errJsonObject("306", "上传文件不是HTML请重新上传").toString());
return;
}
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传后保存的文件名
String prefix = String.valueOf(now);
// 保存的最终文件完整路径,保存在web根目录下的uploadfile目录下
// String u_name = request.getRealPath("/") + "WEB-INF/uploadfile/" + prefix + "." + t_ext;
String u_name = "WEB-INF/uploadfile/" + prefix + "." + t_ext;
try {
// 保存文件
fileItem.write(new File(projectAbsolutePath + u_name));
JSONObject jsonObject = new JSONObject();
jsonObject.put("form_path", u_name);
HtmlParser htmlParser = new HtmlParser();
if (htmlParser.textName(projectAbsolutePath + u_name).size() == 0) {
response.getWriter().write(ErrJsonUitl.errJsonObject("207", "上传表单不能为空").toString());
} else {
response.getWriter().write(jsonObject.toString());
}
} catch (Exception e) {
log.info("上传文件错误" + e);
}
} else {
response.getWriter().write(ErrJsonUitl.errJsonObject("308", "上传文件编码格式化不正确请用文本编辑编辑成UTF-8的格式" + fileencode).toString());
}
}
}
二上传页面
<form id="uploadservlt" method="post" action="upload/file"
enctype="multipart/form-data">
<font color="red">上传文件必须是UTF-8编码格式,文件上传前请用文本编辑器设置一下编码格式,否则会出现乱码情况</font>
</br>
<input type="file" name="file" id="file">
<input type="button" value="上传" οnclick="uploadfile()">
</form>
三上传JS
function uploadfile() {
if($("#file").val().length==0){
$.messager.alert('提示', "上传文件不能为空");
return false;
}
$("#uplocadperson").val($("#userNameOpenShopApply").val());
$('#uploadservlt').ajaxSubmit({
success : function(html, status) {
var jsonobj = eval('(' + html + ')');
if(jsonobj.errorCode==null){
$('#forminfo').form('clear');
$("#formPath").val(jsonobj.form_path);
$("#forminfodiv").dialog('open').dialog('setTitle', '表单信息填写');
}else{
$.messager.alert('提示', jsonobj.errorMessage);
}
}
});
}