5.1 API
5.1.1 attachEvent (evName, evHandler)
版本:大众版
参数:
evName 可定义事件名称
evHandler 用户自定义处理函数.
用途:对当前vault事件绑定用户的自定义的处理js函数,这里支持两种格式定义
5.1.2 create (htmlObject)
版本:大众版
参数:
htmlObject 绑定vault的html容器控件id div,span等
用途:通过容器控件创建一个vault组件。
5.1.3 getFileExtension (fileName)
版本:大众版
参数:
fileName:文件全路径
用途:通过文件全路径获得文件类型。
5.1.4 detachEvent(id)
版本:大众版
参数:
id 事件序号,全局唯一
用途:
删除vault中某个事件的处理过程
5.1.5 onAddFile (fileName)
版本:大众版
参数:
fileName: 文件全路径
用途:当前文件添加或上传前触发当前事件
实例:
vault.onAddFile = function(fileName) {
var ext = this.getFileExtension(fileName);
if (ext != "txt" && ext != "doc") {
alert("You may upload only text documents (txt, doc). Please retry.");
return false; }
else return true;
};
5.1.6 onFileUploaded (file)
版本:大众版
参数:
file: 上传文件中单个js消息对象,主要包含
file = { id: "1", name: "file.name", uploaded: true/false, error: true/false };
用途:当前文件上传完成后触发当前事件,每个文件上传完成后触发
实例:
vault.onFileUploaded = function(file) {
alert("id:" + file.id + ",name:" + file.name + ",uploaded:" + file.uploaded + ",error:" + file.error);
};
5.1.7 onUploadComplete(files)
版本:大众版
参数:
files: 上传文件组js消息对象,主要包含
file = { id: "1", name: "file.name", uploaded: true/false, error: true/false };
用途:当前文件上传完成后触发当前事件,所有文件上传完成后触发
实例:
vault.onUploadComplete = function(files) {
var s="";
for (var i=0; i<files.length; i++) {
var file = files[i];
s += ("id:" + file.id + ",name:" + file.name + ",uploaded:" + file.uploaded + ",error:" + file.error)+"/n";
}
alert(s);
};
5.1.8 setFilesLimit (count)
版本:大众版
参数:
count: 当前可上传文件数量
用途:设置当前可上传文件数量,默认为零,即无限制
实例:
5.1.9 setFormField(fieldName, value)
版本:大众版
参数:
fieldName: 当前提交form中的元素对象名称、id等
value:当前提交form中的元素对象值
用途:上传文件中,设置相关附件变量或表单信息 ,需要在create后定义,这个功能很好
实例:
vault.create("vaultDiv");
vault.setFormField("customerId", "PS104");
vault.setFormField("country", "UK");
vault.setFormField("groupId", null);//若为值为null则当前变量不附加提交
后台读取方式:
FileItemFactory factory = new ProgressMonitorFileItemFactory(
request, fileId);
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
//窗口对象对象处理, 如:customerId, country
System.out.println("窗口对象===" + item.getFieldName()+"===" +item.getString());
} else {
//上传文件对象处理
String fieldName = item.getFieldName();
String fileName = item.getName();
}
5.1.10 setImagePath (path)
版本:大众版
参数:
path: 皮肤文件路径
用途:设置皮肤文件路径
实例:
5.1.11 setServerHandlers(uploadHandler, getInfoHandler, getIdHandler)
版本:大众版
参数:
uploadHandler: 上传文件处理对象
getInfoHandler:上传处理响应信息处理对象
getIdHandler:当前上传线程处理Id到session中
用途:服务端处理对象
实例:
5.1.12 vault.strings
版本:大众版
参数:
设置个性化的vault
用途:vault各元素表面设置
实例:
vault.strings = { remove: "Remove", done: "Done", error: "Error" };
或
vault.strings.remove = "删除"; // Remove
vault.strings.done = "上传成功"; // Done
vault.strings.error = "上传错位"; // Error
vault.strings.btnAdd = "新增文件";
vault.strings.btnUpload = "上传";
vault.strings.btnClean = "清除记录";
vault.strings.errors["TooBig"] = “000”;
5.2 相关使用说明
一、vault处理文件上传的机制是使用commons-fileupload机制实现,采用异步请求的ajax模式完成操作,这里可以实现多文件或单文件的上传,并设定器最大附件size,在上传文件的同时也可以完成页面变量或参数的传递,如果是中文参数,需要对其dhtmlxvault.js做一定修改,主要是避免在tomcat中发生转码异常的问题,具体在(格式化dhtmlxvault.js)后
570行左右,原为:
this.uploadForm.action = this.pathUploadHandler + "?sessionId=" + this.sessionId + "&fileName=" + escape(this.getFileName(this.getCurrentInputFile(id).value)) + "&userfile=" + this.getCurrentInputFile(id).id;
如果当前路径包含中文信息,在tomcat6中会爆
java.io.CharConversionException: isHexDigit
这是因为 org.apache.tomcat.util.http.Parameters 中不能对客户端传过来的数据进行解码。url中包含中文参数,使用escapse问题,但还是不能解决最终问题
在tomcat6中解决如下:
1 在server.xml中设置 URIEncoding编码格式
《Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/》
2 url中文参数或整个url中转码处理
即 url = encodeURI(url);
java中不做任何转码修改,
即
String fileName = request.getParameter("fileName") ;
如果你写成
String fileName = java.net.URLDecoder.decode(request.getParameter("fileName"),"UTF-8") );
也行
二、当前支持最大上传大小this.MAX_FILE_SIZE = 900 * 1024 * 1024;这里可自己扩展方法修改当前值
(注:本人文章均为原创,转载请注明出处!20100702写于深圳。)