bughunter
bughunter
  • 发布:2016-11-08 10:24
  • 更新:2017-03-14 11:43
  • 阅读:6144

使用七牛JS的SDK,上传时通过URL参数获取文件对象,调用plupload上传控件的addFile(file, [fileName])方法,file无法添加到上传队列

分类:HTML5+

使用七牛JS的SDK,上传时通过URL参数获取文件对象,调用plupload上传控件的addFile(file, [fileName])方法,file无法添加到上传队列,resolveFile中if的6种类型都不匹配
//获取文件对象

plus.io.resolveLocalFileSystemURL(path1, function(entry) {  
            // 可通过entry对象操作test.html文件  
            console.log("entry.isFile:" + entry.isFile);  
            entry.file(function(file) {  
                uploader2.addFile(file, 'file');  
            }, function(error) {  
                console.log("FileErrorCallback: " + error.message);  
            });  
}, function(e) {  
        console.log("Resolve file URL failed: " + e.message);  
});

//plupload.dev.js部分代码

/**  
         * Adds file to the queue programmatically. Can be native file, instance of Plupload.File,  
         * instance of mOxie.File, input[type="file"] element, or array of these. Fires FilesAdded,  
         * if any files were added to the queue. Otherwise nothing happens.  
         *  
         * @method addFile  
         * @since 2.0  
         * @param {plupload.File|mOxie.File|File|Node|Array} file File or files to add to the queue.  
         * @param {String} [fileName] If specified, will be used as a name for the file  
         */  
        addFile : function(file, fileName) {  
            console.log('addFile');  
            var self = this  
            , queue = []  
            , filesAdded = []  
            , ruid  
            ;  

            function filterFile(file, cb) {  
                console.log('filterFile');  
                var queue = [];  
                o.each(self.settings.filters, function(rule, name) {  
                    if (fileFilters[name]) {  
                        queue.push(function(cb) {  
                            fileFilters[name].call(self, rule, file, function(res) {  
                                cb(!res);  
                            });  
                        });  
                    }  
                });  
                o.inSeries(queue, cb);  
            }  

            /**  
             * @method resolveFile  
             * @private  
             * @param {o.File|o.Blob|plupload.File|File|Blob|input[type="file"]} file  
             */  
            function resolveFile(file) {  
                console.log('resolveFile');  
                var type = o.typeOf(file);  

                // o.File  
                if (file instanceof o.File) {  
                    console.log('1');  
                    if (!file.ruid && !file.isDetached()) {  
                        if (!ruid) { // weird case  
                            return false;  
                        }  
                        file.ruid = ruid;  
                        file.connectRuntime(ruid);  
                    }  
                    resolveFile(new plupload.File(file));  
                }  
                // o.Blob  
                else if (file instanceof o.Blob) {  
                    console.log('2');  
                    resolveFile(file.getSource());  
                    file.destroy();  
                }  
                // plupload.File - final step for other branches  
                else if (file instanceof plupload.File) {  
                    console.log('3');  
                    if (fileName) {  
                        file.name = fileName;  
                    }  

                    queue.push(function(cb) {  
                        // run through the internal and user-defined filters, if any  
                        filterFile(file, function(err) {  
                            if (!err) {  
                                // make files available for the filters by updating the main queue directly  
                                files.push(file);  
                                // collect the files that will be passed to FilesAdded event  
                                filesAdded.push(file);  

                                self.trigger("FileFiltered", file);  
                            }  
                            delay(cb, 1); // do not build up recursions or eventually we might hit the limits  
                        });  
                    });  
                }  
                // native File or blob  
                else if (o.inArray(type, ['file', 'blob']) !== -1) {  
                    console.log('4');  
                    resolveFile(new o.File(null, file));  
                }  
                // input[type="file"]  
                else if (type === 'node' && o.typeOf(file.files) === 'filelist') {  
                    console.log('5');  
                    // if we are dealing with input[type="file"]  
                    o.each(file.files, resolveFile);  
                }  
                // mixed array of any supported types (see above)  
                else if (type === 'array') {  
                    console.log('6');  
                    fileName = null; // should never happen, but unset anyway to avoid funny situations  
                    o.each(file, resolveFile);  
                }  
                console.log('7');  
            }  

            ruid = getRUID();  
            console.log('ruid:'+ruid);  
            resolveFile(file);  
            console.log('queue.length:'+queue.length);  
            if (queue.length) {  
                o.inSeries(queue, function() {  
                    // if any files left after filtration, trigger FilesAdded  
                    if (filesAdded.length) {  
                        self.trigger("FilesAdded", filesAdded);  
                    }  
                });  
            }  
        },

//控制台输出:
Instantiating FileInput... at js/plupload/moxie.js:1176
Trying runtime: html5 at js/plupload/moxie.js:1176
[object Object] at js/plupload/moxie.js:1176
default mode: browser at js/plupload/moxie.js:1176
selected mode: browser at js/plupload/moxie.js:1176
Runtime 'html5' initialized at js/plupload/moxie.js:1176
Instantiating FileInput... at js/plupload/moxie.js:1176
Trying runtime: html5 at js/plupload/moxie.js:1176
[object Object] at js/plupload/moxie.js:1176
default mode: browser at js/plupload/moxie.js:1176
selected mode: browser at js/plupload/moxie.js:1176
Runtime 'html5' initialized at js/plupload/moxie.js:1176
entry.isFile:true at index2.html:191
addFile at js/plupload/plupload.dev.js:1930
ruid:false at js/plupload/plupload.dev.js:2022
resolveFile at js/plupload/plupload.dev.js:1958
7 at js/plupload/plupload.dev.js:2018
queue.length:0 at js/plupload/plupload.dev.js:2024

//addFile(file, [fileName])
向上传队列中添加文件,如果成功添加了文件,会触发FilesAdded事件。参数file为要添加的文件,可以是一个原生的文件,或者一个plupload文件对象,或者一个input[type="file"]元素,还可以是一个包括前面那几种东西的数组;fileName为给该文件指定的名称

2016-11-08 10:24 负责人:无 分享
已邀请:
暮鼓晨钟

暮鼓晨钟

你好 我现在也遇到了这个和你一模一样的问题 请问一下您解决了么

  • bughunter (作者)

    没有,最后是用plus的上传方法

    2017-03-14 16:27

  • 暮鼓晨钟

    回复 bughunter:现在我就是用plus的上传方法 然后在addfile的这个地方还是没有filename呀

    2017-03-15 09:38

  • 暮鼓晨钟

    方便加下QQ么 我们讨论一下 598015571

    2017-03-15 09:39

  • 1***@163.com

    回复 暮鼓晨钟:你解决了吗,我也遇到了这种问题

    2018-05-15 13:29

  • Ling是铃铛的铃

    回复 bughunter: 我也遇到同样的问题,请问有解决方法吗?

    2020-01-07 17:37

该问题目前已经被锁定, 无法添加新回复