java + uploadifty web文件上传
一、页面操作
js的引入:<link href="/js/jquery/upload/uploadify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<c:url value="/js/jquery/upload/swfobject.js"/>"></script>
<script type="text/javascript" src="<c:url value="/js/jquery/upload/jquery.uploadify.v2.1.0.js"/>"></script>
<script type="text/javascript" src="<c:url value="/js/ui/jquery.ui.position.min.js"/>"></script>
上传控件设置,upload是type=‘file’的对象id
$("#upload").uploadify({
"uploader": "<c:url value="/js/jquery/upload/uploadify.swf"/>", //固定
"script": "<c:url value="/frameworkjson/uploadJsonAction.do"/>", //提交后要处理的action,只写action不用写method
"cancelImg": "<c:url value="/js/jquery/upload/cancel.png"/>",
"buttonImg":"<c:url value="/images/sc.gif"/>", //上传按钮图片
"scriptData":{'userid':'123','username':'123'},//向后台传的数据要json的格式,后台有userid、username的get、set方法就能获得
"width":"70",
"heigth":"30",
"folder":"upload", //要上传的文件目录
"multi":false, //是否支持多文件上传
"fileExt":"*.pdf;*.doc;*.docx;*.xls;*.xlsx;", //允许上传的文件类型
"fileDesc":".pdf;.doc;.docx;.xls;.xlsx;", //必须在fileExt下边设置,否则无效
"fileDataName":"physicalPath", //为后台传递的物理地址,uploadify自动将文件后缀改成tmp
"method":"GET", //上传方式Get/Post,如果向后台传输数据,必须是get
"queueID":"fileQueue", //显示进度的div的id
"auto":true, //选中文件直接上传
"simUploadLimit":10, //同时上传的文件数量
"queueSizeLimit":10, //允许上传的文件数量
"sizeLimit":10485760, //10M文件大小
"onComplete" : function(event,queueID,file,serverData,data){ //file为上传的文件对象file.name可以获得上传文件的名称;serverData是后台返回的数据;data有两个属性fileCount和speed
var filejson=$.parseJSON(serverData); //serverData是json格式字符串,将其转化成json对象
var json = $.parseJSON(filejson.returnMessage); //将返回的数据读取出来
alert(json);
alert(json.returnFileName);
},
"onError": function () {
Message.show("上传出现错误,任务已取消!");
return true;
}
});
***当取消上传时,文件会在队列中删除,可调用onComplete的次数不会减少,这时要判断onComplete的参数data.fileCount:0是要上传的文件,-1是取消上传的文件;还有但引入的uploadify2.1.4点击红叉时会报错,具体原因还未知。
二、后台部分
public String upload(){
Map map = new HashMap();
try{
HttpServletRequest request = ServletActionContext.getRequest();
File file = new File(request.getRealPath(folder)); //folder有get、set方法,获得js传来要保存的文件目录
File uploadFile = new File(physicalPath); //physicalPath上传文件的物理路径,uploadify编译过的,有get、set方法
if(!file.exists()){
file.mkdirs();
}
//获取文件类型
int index = physicalPath.lastIndexOf(".");
String type = physicalPath.substring(index);
//读取文件
FileInputStream fis = new FileInputStream(uploadFile); //获取客户端文件
byte[] buffer = new byte[fis.available()+1];
fis.read(buffer); //将客户端文件读取到byte数组
fis.close();
//写入文件
Date date = new Date();
FileOutputStream fos = new FileOutputStream(request.getRealPath(folder)+"/"+date.getTime()+type);
fos.write(buffer);
fos.close();
map.put("flag", true);
map.put("returnFileName", date.getTime());
}catch(Exception ex){
map.put("flag", false);
map.put("returnFileName", "");
ex.printStackTrace();
}finally{
returnMessage=JSONObject.fromObject(map).toString();
return "JSONRESULT";
}
}
三、struts.xml配置(package继承与json-default)
<!-- 文件上传 --> <action name="uploadJsonAction" class="uploadAction" method="upload"> //指定方法,页面指定方法将会报错 <result name="JSONRESULT" type="json"> <param name="includeProperties">returnMessage</param> </result> </action>
本文来源 我爱IT技术网 http://www.52ij.com/jishu/4348.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
