Plupload:在开始上传之前执行自定义检查

时间:2015-05-19 15:23:03

标签: javascript c# asp.net-mvc file-upload plupload

我有一个带有表单和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,现在我的脚本被忽略了。

有人可以告诉我我在哪里傻吗?谢谢!

1 个答案:

答案 0 :(得分:2)

解决了。 这是一个讨厌,丑陋的黑客,但它的确有效:

  • 制作"实际"隐藏提交/上传按钮
  • 制作了第二个按钮,用作具有onclick功能的预提交按钮
  • onclick函数调用checkReq,如果返回true,则该函数调用" actual"的click()函数。提交/上传按钮

就像我说的那样:讨厌,但它有效。