粘贴大文件

Pasting large files

本文关键字:文件      更新时间:2023-09-26

我正在写一个插件来处理文件上传。我认为实现粘贴功能将是很棒的(你有多少次只是想粘贴,而不是打开照片编辑器,然后将其保存为文件,然后上传,但我离题了)。到目前为止,我所做的都是有效的,除了当被粘贴的文件变得太大时。我不能告诉你"太大"是什么大小,因为我正在做一个截图选择并保存到剪贴板。

我当前的代码看起来像

document.getElementById('AJS').onpaste = function (e) {
    var items = (e.clipboardData || e.originalEvent.clipboardData).items,
    blob = items[0].getAsFile();
    if (blob && blob.type.match(T.s.accept) && T.currentlength < T.s.maxFiles) {
        T.process(param1, param2, param3, param4, items[0].getAsFile());
    }
};

T.process

T.process = function (file, i, changing, target, pasteblob) {
    var fr = new FileReader();
    fr.onload = function (e) {
        var blob = pasteblob || new Blob([e.target.result], {type: file.type});
        var dataURL = (win.URL || win.webkitURL).createObjectURL(blob);
        var index = changing ? i : T.currentlength;
        var filedata =  {};
        if (file.type.match('image/*')) {
            var img = new Image();
            img.onload = function () {
                // Doing stuff
            };
            img.src = dataURL;
        } else {
            // Doing stuff
        }
    };
    fr.readAsArrayBuffer(pasteblob || file);
};

对于较大的文件,来自blob = items[0].getAsFile()的blob返回大小为0。其他人遇到过这个问题吗?你是如何克服它的?

注意:我使用的是最新的Chrome在Ubuntu 14.04

虽然除了我自己对此事的个人研究之外,我没有任何参考资料,但似乎Ubuntu版本的chrome上有一个错误,阻止用户使用本机JS api复制和粘贴。如果你试图用Ubuntu Chrome在GMail邮件中粘贴截图,你会得到一个错误,但这个错误在任何其他版本的Chrome中都不会出现。对于我上面的代码也是一样的。我在本机windows和OS X环境中测试了它,运行指向我的机器的chrome,使用这个脚本进行粘贴工作得很好!