粘贴大文件

时间:2014-07-01 15:26:17

标签: javascript html5 google-chrome ubuntu paste

我正在编写一个插件来处理文件上传。我认为实现粘贴功能会很棒(你的事件经常只想粘贴而不必打开照片编辑器然后将其保存为文件然后上传,但我离题了)。到目前为止我所做的工作是有效的,除了被粘贴的文件变得太大。我无法告诉你“太大”的大小,因为我正在做截图选择并将其保存到剪贴板。

我当前的代码看起来像

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.是否有其他人遇到此问题以及您是如何克服它的?

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

1 个答案:

答案 0 :(得分:0)

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