【发布时间】:2015-07-31 12:37:45
【问题描述】:
我有一个带有表单和 plupload 文件上传器部分的 MVC 5 视图。上传由表单上的按钮触发。我将文件块上传到服务器并将参数设置为查询字符串等都没有问题,但我遇到的问题是仅在执行自定义健全性检查后才开始上传。
这是我尝试过的:
var uploader = new plupload.Uploader({
runtimes: 'html5',
drop_element: 'upload',
browse_button: 'browse',
url: "../UploadFile",
chunk_size: "1024kb",
multipart_params: { "uid": "uid", "chunk": "chunk", "chunks": "chunks", "name": "name" },
init: {
PostInit: function(file) {
document.getElementById("filelist").innerHTML = "";
document.getElementById('submit-all').onclick = function () {
document.getElementById("infoPopup").style.visibility = "visible";
document.getElementById('submit-all').enabled = false;
var uuid = Math.uuidFast();
document.getElementById("uid").value = uuid;
uploader.settings.multipart_params = { uid: uuid, chunk: file.chunk, chunks: file.chunks, name: file.name };
if (checkReq) {
uploader.start();
}
return false;
};
},
这里的关键部分是:
if(checkReq){
uploader.start();
}
“checkReq”是我的自定义健全性检查脚本,用于验证表单值是否无意义(例如,单个表单条目可能完全有效,而组合起来它们完全是错误的,等等)。
所以上面没有阻止上传,甚至没有触发检查脚本,Firebug控制台输出显示没有错误。
由于谷歌搜索告诉我还有一个“BeforeUpload”事件,我尝试了这个:
BeforeUpload: function(up, file) {
if (checkReq) {
up.stop();
return false;
}
return true;
},
这似乎也根本没有开火。
编辑:下一次尝试,我将对我的 checkReq 函数的调用放入“preinit”中的 BeforeUpload 中,应该在任何分块等完成之前触发,因此在准备上传之前。这也失败了,虽然我不知道为什么它不会触发:
var uploader = new plupload.Uploader({
runtimes: 'html5',
drop_element: 'upload',
browse_button: 'browse',
url: "../UploadFile",
chunk_size: "1024kb",
multipart_params: { "uid": "uid", "chunk": "chunk", "chunks": "chunks", "name": "name" },
preinit: {
BeforeUpload: function (up) {
if (checkReq) {
uploader.stop();
uploader.splice(0, uploader.files.length);
return false;
}
return true;
}
},
init: {
PostInit: function(file) {
...
我之前使用过“dropzone.js”,我的脚本可以正常工作,但我发现我需要分块上传,所以我不得不转向 plupload,现在我的脚本被忽略了。
有人可以告诉我我在哪里愚蠢吗?谢谢!
【问题讨论】:
标签: javascript c# asp.net-mvc file-upload plupload