2015-05-19 94 views
1

我有一个带有窗体和plupload文件上传器部分的MVC 5视图。上传由表单上的按钮触发。我没有问题上传文件块到服务器,并设置参数查询字符串和所有,但我有一个问题是开始上传只有在执行定制健全性检查Plupload:在开始上传之前执行自定义检查

这是我曾尝试:

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函数放入BeforeUpload中的“preinit”中,应该在任何分块等完成之前触发,所以在上传准备好之前。这也失败了,虽然我不知道为什么它不火:

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,现在我的脚本被忽略。

请问有人可以告诉我我在哪里愚蠢吗?谢谢!

回答

2

把它解决了。 这是一个肮脏的,丑陋的黑客攻击,但它的工作原理:

  • 制造隐藏的“实际”提交/上传按钮
  • 发了第二个按钮,可用作具有的onclick功能
  • 的onclick功能前提交按钮调用checkReq,如果返回true,函数调用“实际”提交/上传按钮的click()函数

就像我说的:讨厌但它的工作原理。

相关问题