【问题标题】:plupload removeFiles上传删除文件
【发布时间】:2012-02-09 03:48:21
【问题描述】:

我正在尝试在 FilesAdded 事件中删除具有不允许扩展名的文件。 (我不能使用 filter 参数,因为我需要一个独占列表)。

我有一些代码有点像这样:

uploader.bind('FilesAdded', function(up, files) {
    var count = files.length;
    var i = 0;
    for (i;i<count;i++) {
        var validExt = validate(files[i].name);
        if(!validExt){

如果扩展名无效,我需要删除添加的文件。我尝试了以下方法:

uploader.splice(i,1)
uploader.removeFile(files[i]);
uploader.refresh();

FilesRemoved 事件被触发,但删除的文件仍会通过 uploader.start() 上传。

我不知道这是否是程序中的错误,或者太晦涩而无法期待一个简单的答案,但如果有人可以提供帮助,我将非常感激。我不认为我遗漏了任何明显的东西。

谢谢。

【问题讨论】:

    标签: javascript upload plupload


    【解决方案1】:

    当没有上传进度并且您想从上传者列表中删除所有排队的文件时:

    var queueLength = uploader.files.length;

    for (i = 0; i

    if (uploader.files[0] && uploader.files[0] !== undefined) {

    uploader.removeFile(uploader.files[0]);

    }

    }

    注意:如果你尝试按索引删除文件,一些文件会留在列表中;因为每次从列表中删除文件项时,都会刷新它并重新使用索引。

    【讨论】:

    • 这是唯一对我有用的方法,不幸的是,在我看到这个答案之前我花了很多时间并得出了相同的结论..
    【解决方案2】:

    一些事情......

    首先你必须在调用 init() 函数后绑定 filesAdded 事件。

    uploader.init();
    
    uploader.bind('FilesAdded', function (up, files) {...}
    

    第二,您可以在定义 plupload 时使用 prop 过滤器过滤文件扩展名

    uploader = new plupload.Uploader({
            ...,
            filters: [
                { title: "Image files", extensions: "jpeg,jpg,gif,png" }
            ],
            ...
        });
    

    这是一个从 plupload 中删除文件的工作示例

    $.each(uploader.files, function (i, file) {
        if (file && file.id != currentFile.id) {
            uploader.removeFile(file);
        }
    });
    

    干杯!

    【讨论】:

    • *嗨。谢谢。我想我可能找到了解决办法。澄清一下,我认为您确实传递了文件对象而不是 ID。至少在当前的 plupload 版本中对我有用。我不确定你的答案是不是最好的——我认为我没有使用 jQuery,但它对我来说已经足够了。
    【解决方案3】:
    uploader.bind('FilesAdded', function(up, files) {
        if( files.length > 1 )
        {
            $.each(files, function(i, file) {
                up.removeFile(file);    
            });
        }
    });
    

    【讨论】:

    • 考虑在您的解决方案中添加一些 cmets 并格式化代码,这将使 OP 和未来的访问者更加不稳定
    【解决方案4】:

    您可以使用回调“QueueChanged”,它也适用于我。

    uploader.bind('QueueChanged', function(up){
    
      var file_count = up.files.length;
      for(i = 0; i < file_count; i++) {
        if(i != (file_count - 1)) up.removeFile(up.files[i]);
      }
    
    });
    

    【讨论】:

      【解决方案5】:

      您需要将要删除的文件的id传递给removeFile:

      uploader.removeFile(files[i].id)

      【讨论】:

        猜你喜欢
        • 2021-10-26
        • 2015-01-06
        • 1970-01-01
        • 2023-01-16
        • 1970-01-01
        • 1970-01-01
        • 2013-04-27
        • 2014-02-24
        • 2012-04-06
        相关资源
        最近更新 更多