在Cordova-Plugin-File(ios)的FileReader上调用ReadAsarrayBuffer方法时出



在iOS上,我试图将视频上传到自己的网站,然后使用fileReader.ReadAsarrayBuffer方法,其块为1048576。

我上传块时,当OnproGress启动启动时,除了更大的文件外,所有这些实际上都可以正常工作。尝试上传1.33GB的文件时,我会在调用readasarraybuffer方法时会得到一个失败的异常。

我想这是因为它试图为完整文件保留内存,但是这不是必需的。有没有办法从文件中读取二进制块而不为完整文件保留内存?还是还有其他解决方案?

谢谢!

我今天通过更改插件代码修复了它,这是原始代码:

FileReader.prototype.readAsArrayBuffer = function (file) {
   if (initRead(this, file)) {
       return this._realReader.readAsArrayBuffer(file);
   }
   var totalSize = file.end - file.start;
   readSuccessCallback.bind(this)('readAsArrayBuffer', null, file.start, totalSize, function (r) {
       var resultArray = (this._progress === 0 ? new Uint8Array(totalSize) : new Uint8Array(this._result));
       resultArray.set(new Uint8Array(r), this._progress);
       this._result = resultArray.buffer;
   }.bind(this));
};

,并且由于在开始时始终为0,因此它始终保留整个文件。我添加了一个prepery read_chunked(因为我还有其他现有的代码也使用了这种方法,并希望它能像它一样工作,所以我必须检查以查看其他所有内容也一直在工作)并将上述更改为以上:

FileReader.prototype.readAsArrayBuffer = function(file) {
    if (initRead(this, file)) {
        return this._realReader.readAsArrayBuffer(file);
    }
    var totalSize = file.end - file.start;
    readSuccessCallback.bind(this)('readAsArrayBuffer', null, file.start, totalSize, function(r) {
        var resultArray;
        if (!this.READ_CHUNKED) {
            resultArray = new Uint8Array(totalSize);
            resultArray.set(new Uint8Array(r), this._progress);
        } else {
            var newSize = FileReader.READ_CHUNK_SIZE;
            if ((totalSize - this._progress) < FileReader.READ_CHUNK_SIZE) {
                newSize = (totalSize - this._progress);
            }
            resultArray = new Uint8Array(newSize);
            resultArray.set(new Uint8Array(r), 0);
        }
        this._result = resultArray.buffer;
    }.bind(this));
};

当read_chunked属性为真时,它仅返回块,并且不保留整个文件的内存,当它是错误的时,它像以前一样工作。

我从来没有使用过github(除了拉代码),所以我现在没有上传它,我可能会在不久的将来调查。

相关内容

  • 没有找到相关文章

最新更新