继承自Ext.form.field.Picker,值为服务端返回的path路径。
imagefield
Ext.define('My.widget.form.field.ImageField', {
extend : 'Ext.form.field.Picker',
alias : 'widget.imagefield',
requires : ['Ext.form.field.Picker',
'My.widget.form.field.ImageUploadDialog'],
matchFieldWidth : false,
config : {
cfg : {}
},
createPicker : function() {
var me = this;
var cfg = this.cfg || {};
Ext.applyIf(cfg, {
title : me.fieldLabel,
onUploaded : function(path) {
me.setValue(path);
},
listeners : {
close : function() {
me.collapse();
}
}
});
var dlg = Ext.create('My.widget.form.field.ImageUploadDialog', cfg);
this.dlg = dlg;
return dlg;
},
alignPicker : function() {
// do nothing:对话框,不需要对齐。
},
expand : function() {
this.callParent();
// 去掉点击窗体外部关闭对话框事件
var me = this;
if (me.rendered && !me.isDestroyed) {
var doc = Ext.getDoc();
var collapseIf = me.collapseIf;
doc.un('mousewheel', collapseIf, me);
doc.un('mousedown', collapseIf, me);
Ext.un('resize', me.alignPicker, me);
}
this.dlg.setPath(this.getValue());
}
});
Ext.define('My.widget.form.field.ImageUploadDialog', {
extend : 'My.view.core.WindowUI',
alias : 'widget.form.field.ImageUploadDialog',
title : '图片',
floating : true,
autoShow : false,
modal : true,
width : 500,
height : 600,
config : {
onUploaded : undefined
},
closeAction : 'hide',
layout : {
type : 'border'
},
setPath : function(path) {
var imgSrc = this.lookupReference('imageInformationSrc');
imgSrc.getEl().dom.src = path;
var imgPath = this.lookupReference('imageInformationPath');
imgPath.getEl().dom.innerHTML = " <a href='"+path+"' target='_blank'>" + path + "</a>";
this.path = path;
},
onDeletePath : function() {
this.setPath('');
},
onOK : function() {
this.onUploaded(this.path);
this.close();
},
onCancel : function() {
this.close();
},
initGUI : function() {
this.callParent();
var me = this;
this.items = [];
this.items.push({
reference : 'imageInformationPath',
region : 'north',
height : 40,
xtype : 'box',
style : 'background-color: #fff;',
autoEl : {
tag : 'div'
}
});
this.items.push({
reference : 'imageInformationSrc',
region : 'center',
xtype : 'box',
autoHeight : true,
style : 'background-color: #fff;',
autoEl : {
tag : 'img'
}
});
this.items.push({
region : 'south',
xtype : 'form',
bodyPadding : "5",
buttons : [{
text : '清除',
listeners : {
scope : me,
click : me.onDeletePath
}
}, {
xtype : 'component',
flex : 1
}, {
text : '确定',
listeners : {
scope : me,
click : me.onOK
}
}, {
text : '取消',
listeners : {
scope : me,
click : me.onCancel
}
}],
items : [{
xtype : "filefield",
name : "file",
buttonOnly : true,
// fieldLabel : "选择文件",
buttonText : "选择文件上传...",
allowBlank : false,
listeners : {
'change' : function(fb, v) {
// 浏览器限制,不能显示本地文件。
// Ext.getCmp('imageInformationSrc').html = v;
var formCmp = this.up("form");
if (!formCmp.isValid()) {
return;
}
formCmp.submit({
url : My.Def.rpc,
method : "POST",
waitMsg : '正在上传...',
success : function(form, action) {
var ret = action.result;
if (ret.success) {
Ext.MessageBox.alert("上传成功", ret.data);
me.setPath(ret.data);
} else {
Ext.MessageBox.alert("失败", ret.error);
}
},
failure : function(form, action) {
switch (action.failureType) {
case Ext.form.action.Action.CLIENT_INVALID :
Ext.Msg
.alert('失败',
'Form fields may not be submitted with invalid values');
break;
case Ext.form.action.Action.CONNECT_FAILURE :
Ext.Msg.alert('失败',
'Ajax communication failed');
break;
case Ext.form.action.Action.SERVER_INVALID :
Ext.Msg.alert('失败',
action.result.message);
}
}
});
}
}
}]
});
}
});
servlet (org.apache.commons.fileupload)
public T uploadFile(HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("UTF-8");
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(request.getCharacterEncoding());
List<?> items = upload.parseRequest(request);
Iterator<?> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
// 普通文本信息处理
} else {
// 上传文件信息处理
// log.info("[UploadFile]" + item.getName());
T f = saveFile(item.getName(), item.get());
return f;
}
}
return null;
}
usage
{
name : 'iconPath',
xtype : 'imagefield'
}
效果