当Kendo Upload组件应该第二次执行上传时,不会触发onUpload事件处理程序。
我将kendo upload与cropperjs(https://github.com/fengyuanchen/cropperjs/blob/master/README.md)一起使用来上传图像,裁剪图像,然后将其发送到服务器。如果图像太大,服务器将发送错误。期望用户选择另一个作物区域并再次发送图像。在最后一步没有任何反应。
这里是裁剪图片并执行上传的方式
cropper.crop();
var canvas = cropper.getCroppedCanvas();
canvas.toBlob(function (blob) {
image = blob;
$("#file").data("kendoUpload").upload();
});
然后在onUpload处理程序中,将原始裁剪后的图像替换为裁剪后的图像。
e.data = {
file: image,
userName: $("#User_Login").val()
};
在服务器上发给我一个错误:
public virtual ActionResult UpdateUserImage([FromBody]HttpPostedFileBase file, [FromBody]string userName)
{
try
{
ImageHelper.CheckImage(file);
}
catch (Exception e)
{
return new LargeJsonResult(new
{
error = e.Message,
})
{
StatusCode = HttpStatusCode.PreconditionFailed
};
}
...
}
该错误在onError流程处理程序中处理:
var err = e.XMLHttpRequest;
if (err.status === 412) {
var body = JSON.parse(err.response);
alert(body.error);
}
else {
alert("Unable to upload the file. Please check that the
size is less than 10Mb.");
}
之后,允许用户裁剪已经选择的图像。并且在改变裁剪区域之后,预期将重复上述步骤。但是在第一个代码块中的$("#file").data("kendoUpload").upload();
之后,什么也没有发生。但是,我希望必须调用onUpload事件处理程序。
答案 0 :(得分:0)
我找到了解决方法:)
我没有在服务器上检查图像的大小,而是将图像发送到服务器,而是在客户端上检查大小,并根据需要阻止发送。
我的意思是在致电$("#file").data("kendoUpload").upload();
之前先致电
if (image.size > 10 * 1024 * 1024) {
alert("File is too big!");
return;
}
一切正常。
但是,如果仍然有人知道为什么$("#file").data("kendoUpload").upload();
不触发onUpload事件处理程序,那么与我分享想法将是很棒的:)