|
发表于 2018-11-2 20:01:06
|
显示全部楼层
本帖最后由 gaiyi 于 2018-12-26 16:10 编辑
文件上传
我在3.7版本的时候在modelLoad方法中,自定义了 var URL ="";//自己定义的服务器action路径,用的是.net,就是一般处理程序ashx的路径
this.comp("attachmentSimple1").actionUrl = URL;
this.comp("attachmentSimple1").uploader.actionUrl = URL;
但是升到3.8之后,这样做失效了,上传组件只认识在控件属性中填写的actionUrl,然后我用截图中的方式也实现了,就是直接把上传路径填写在控件actionUrl属性中,后台的处理大概就是
Stream oStream = context.Request.Files[0].InputStream;
…………
…………
只是这样子做,没办法监听上传的过程,如果后台处理返回了错误码,前台不知如何处理。
-----------------------------------------------------------------------------------------更新------------------------------------------------------------------------------------------
仔细研究了一下组件之后,其实方法是可以监听的:成功解决问题
// 自定义上传组件属性和限制,这是我在自定义共用js(utils)中定义的一个方法,可以在页面中通过
var attachmentSimple1= this.comp("attachmentSimple1");
取到该控件。然后调用自定义方法:例如:utils.attachment(attachmentSimple1);
attachment : function(att) {
var actionUrl = this.baseUrl() + "/api/newFile.ashx?action=uploadFiles";
// 监听选中事件
att.uploader.on('onFileSelected', function(event) {
if (event.file.size > 31457280) {
alert("上传的文件大小不能超过30M");
event.cancel = true;
}
var houzhui = event.file.name.split(".")[1];
if (houzhui != "rar") {
alert("上传文件仅限于rar");
event.cancel = true;
}
});
// 监听上传事件
att.uploader.on('onStart', function(event) {
var items = att.getItems();
if (items.length > 0) {
$.each(items, function(i, v) {
var storeFileName = v.storeFileName;
var ownerID = att.getOwnerID(v);
att.deleteFile(storeFileName, ownerID);
});
}
event.source.actionUrl = actionUrl;
var storeFileName = (new justep.UUID()).valueOf();
event.file.data = {
fileName : event.file.name,
storeFileName : storeFileName,
ownerID : att.getOwnerID()
};
});
}
|
|