1.页面配置
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="my" uri="/mytags"%><%String dir = request.getParameter("d");%>
<%
String p = request.getParameter("p");
String height = request.getParameter("height")==null?"350":request.getParameter("height");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<my:head lhgdialog="true">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>附件上传</title>
<link href="${base }/commons/uploadify/default.css" rel="stylesheet" type="text/css" />
<link href="${base }/commons/uploadify/uploadify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="${base }/commons/uploadify/swfobject.js"></script>
<script type="text/javascript" src="${base }/commons/uploadify/jquery.uploadify.v2.1.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var api = frameElement.api;
var uploadOk = function(file){
if(typeof(api) !== "undefined" && api !== null && api.data){
api.data.files = api.data.files||new Array();
api.data.files.push(file);
}
};
var imgTypes = "*.gif;*.jpg;*.jpeg;*.png;*.bmp";
var imgDesc = "图片文件("+imgTypes+")";
var mediaTypes = "*.swf;*.flv;*.mp3;*.wav;*.wma;*.wmv;*.mid;*.avi;*.mpg;*.asf;*.rm;*.rmvb";
var mediaDesc = "媒体文件(" + mediaTypes + ")";
var flashTypes = "*.swf;*.flv";
var flashDesc = "Flash文件("+flashTypes+")";
var allTypes = "*.*";
var allDesc = "所有文件("+allTypes+")";
var dir = "<%=dir==null?"file":dir%>";
var fileTypes;
var fileDesc;
if("image" == dir){
fileTypes = imgTypes;fileDesc=imgDesc;
}else if("media" == dir){
fileTypes = mediaTypes;fileDesc=mediaDesc;
}else if("flash" == dir){
fileTypes = flashTypes;fileDesc=flashDesc;
}else{
fileTypes = allTypes;fileDesc=allDesc;
}
$("#imgFile").uploadify({
uploader:'${base }/commons/uploadify/uploadify.swf',
script:'${base}/base/file.do?add&jsessionid=<%=session.getId()%>',
//jsessionid=....是解决火狐上面获取不到sessionid上传出错的
cancelImg:'${base }/commons/uploadify/cancel.png',//取消按钮图片
//向后台传的数据
fileDesc: '请选择'+fileDesc+'文件', //上传文件类型说明
fileExt: fileTypes, //控制可上传文件的扩展名,启用本项时需同时声明fileDesc
method:'post', //如果向后台传输数据,必须是get
//scriptData:{'ywlx':$('#ywlx').val()},//这是页面初始化时获取已经存在的值传递方式(静态方式)
queueID: 'fileQueue',//和存放队列的DIV的id一致
fileDataName: 'imgFile', //和以下input的name属性一致
scriptData: {//动态传递表单参数
'dir':dir, "isCheckRole":"<%=request.getParameter("isCheckRole")==null?"1":request.getParameter("isCheckRole")%>", "path":"<%=p%>"
},
multi: true, //是否支持多文件上传
simUploadLimit: 5, //一次同步上传的文件数目
queueSizeLimit: 5, //队列中同时存在的文件个数限制
auto:false,//选定文件后是否自动上传,默认false
sizeLimit: 100*1024*1024,//文件上传的大小限制(这边是100M),单位是字节
buttonText:'选择文件',//浏览按钮上的文字
onComplete:function(event, queueID, fileObj, serverData, data) { //当上传完成后的回调函数,ajax方式哦~~
server_data =decodeURIComponent(serverData).replace(/\+/g, ' ');//.replace(/\\/g, '\\\\');
var json_msg =jQuery.parseJSON(server_data);
if(json_msg.error == 0){
$.dialog({
title : "消息提示",
content : "上传成功 !",
max: false,
min: false,
lock: true,
icon:"success.gif",
time:2,
parent:$dialogParent()
});
//$.dialog.tips("上传成功",1,"tips.gif");
$("#fid").val(json_msg.id);
$("#fname").val(json_msg.name);
$("#furl").val(json_msg.url);
}else{
//$.dialog.tips("上传失败,错误原因为:"+json_msg.message,1,"tips.gif");
$.dialog({
title : "消息提示",
content : "上传失败,错误原因为:"+json_msg.message,
max: false,
min: false,
lock: true,
icon:"success.gif",
time:2,
parent:$dialogParent()
});
}
//失败不需要执行下面内容
if(json_msg.error == 0){
<%String f = request.getParameter("f");%>
<%if(f != null && f.trim().length() > 0){%>
if(window.parent.menuIframeId && window.parent.menuIframeId.<%=f.trim()%>){
window.parent.menuIframeId.<%=f.trim()%>(json_msg.id,json_msg.name,json_msg.url);
}else if(window.opener.menuIframeId && window.opener.menuIframeId.<%=f.trim()%>){
window.opener.menuIframeId.<%=f.trim()%>(json_msg.id,json_msg.name,json_msg.url);
}<%}%>
}
},
onSelect: function(e, queueId, fileObj) {
/**alert("唯一标识:" + queueId + "\r\n" +
"文件名:" + fileObj.name + "\r\n" +
"文件大小:" + fileObj.size + "\r\n" +
"创建时间:" + fileObj.creationDate + "\r\n" +
"最后修改时间:" + fileObj.modificationDate + "\r\n" +
"文件类型:" + fileObj.type
);*/
},
onError: function(event, queueID, fileObj, errorObj) {
if (errorObj.type === "File Size"){
$.dialog.tips("超过文件上传大小限制(100M)",1,"tips.gif");
return;
}
$.dialog.alert("文件:" + fileObj.name + " 上传失败");
}
});
});
</script>
<style>
.ui_loading{
z-index: 1111111;
}
</style>
</my:head>
<body style="background:#F6F9FF;">
<form action="${base}/base/file.do?add" method="post" enctype="multipart/form-data">
<table width="100%">
<tr>
<td colspan="2"><div id="fileQueue" style="overFlow-y:auto;height: <%=height%>px;width: 100%;"></div></td>
</tr>
<tr>
<td width="26%"><input type="file" name="imgFile" id="imgFile"/></td>
<td>
<input type="button" class="orange button" style="width:100px;height:30px;" οnclick="jQuery('#imgFile').uploadifyUpload();" value="开始上传"/>
<!--<input type="button" class="orange button" οnclick="jQuery('#imgFile').uploadifyClearQueue();" value="取消上传"/>-->
</td>
</tr>
</table>
</form>
<input type="hidden" id="fid" >
<input type="hidden" id="fname" >
<input type="hidden" id="furl" >
</body>
</html>
2.后台代码
@ResponseBody
@RequestMapping(params = ("add"))
public String add(String path, String dir, String isCheckRole, //File imgFile,
MultipartFile imgFile, HttpServletRequest request,
HttpServletResponse response) throws RunanException {
Object message = null;
Map<String, Object> result = new HashMap<String, Object>();
try {
SessionUser user = SessionManager.getSessionUser();
if (user == null) {
message = "用户未登录或登录超时";
}
if (message != null) {
result.put("error", 1);
result.put("message", message);
return JSONObject.toJSONString(result);
}
String fileName = imgFile.getOriginalFilename();
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1)
.toLowerCase();
String name = dir + "_"
+ DateUtils.dateToString(new Date(), "yyyyMMddHHmmss")
+ "_" + new Random().nextInt(1000) + "." + fileExt;
String md5 = MD5Util.getFileMD5String(imgFile.getInputStream());
if (StringUtils.isBlank(path)) {
path = "/";
}
path = parsePath(path);
if (!"0".equals(isCheckRole)
&& !filePermissionService.canWrite(path)) {
result.put("error", 1);
result.put("message", "没有权限上传文件到该目录");
//return JSONObject.toJSONString(result);
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
String r = (JSONObject.toJSONString(result));
try {
r = new String(URLEncoder.encode(r, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return r;
}
CommonsMultipartFile cf = (CommonsMultipartFile) imgFile;
DiskFileItem fi = (DiskFileItem) cf.getFileItem();
File f = fi.getStoreLocation();
// long length = ((File) imgFile).length();
long length = f.length();
// fileService.storage((File) imgFile, name);
try {
fileService.storage(f, name);
} catch (Exception ex) {
/* 增加接口直接存储内存中的文件。 */
fileService.storage(imgFile, name);
}
int[] pids = ArrayUtils.toIntArray(path.split("/"));
int pid = 0;
if (pids != null && pids.length > 0) {
pid = pids[pids.length - 1];
}
PFFile file = new PFFile();
file.setFilePath(path);
file.setId(name);
file.setMd5(md5);
file.setName(fileName);
file.setUploadTime(new Date());
file.setParentId(pid);
file.setKeyWord(fileName);
file.setFileType(fileExt);
file.setFileSize(new Long(length).intValue());
file.setFlag(0);
if (user != null) {
file.setUserid(user.getUserid());
}
fileService.addFile(file);
result.put("error", 0);
// String url =
// request.getRequestURI().replaceFirst("add\\.action","download.action");
String url = request.getRequestURI() + "?download";
if (url.lastIndexOf("&jsessionid") > 0) {
url = url.substring(0, url.lastIndexOf("&jsessionid"));
}
result.put("url", url + "&f=" + name);
result.put("name", fileName);
result.put("id", name);
} catch (Exception e) {
result.put("error", 1);
log.debug(e);
}
//return JSONObject.toJSONString(result);
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
String r = (JSONObject.toJSONString(result));
r = new String(URLEncoder.encode(r, "UTF-8"));
return r;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}