使用WebSocket上传大文件

2024-04-03

我正在尝试使用 WebSocket API 上传大文件(至少 500MB,最好达到几 GB)。问题是我不知道如何编写“发送文件的这一部分,释放所使用的资源,然后重复”。我希望我可以避免使用 Flash/Silverlight 之类的东西。

目前,我正在从事以下工作:

function FileSlicer(file) {
    // randomly picked 1MB slices,
    // I don't think this size is important for this experiment
    this.sliceSize = 1024*1024;  
    this.slices = Math.ceil(file.size / this.sliceSize);

    this.currentSlice = 0;

    this.getNextSlice = function() {
        var start = this.currentSlice * this.sliceSize;
        var end = Math.min((this.currentSlice+1) * this.sliceSize, file.size);
        ++this.currentSlice;

        return file.slice(start, end);
    }
}

然后,我将使用以下方式上传:

function Uploader(url, file) {
    var fs = new FileSlicer(file);
    var socket = new WebSocket(url);

    socket.onopen = function() {
        for(var i = 0; i < fs.slices; ++i) {
            socket.send(fs.getNextSlice()); // see below
        }
    }
}

基本上,这会立即返回,bufferedAmount 不变 (0),并且在尝试发送之前不断迭代并将所有切片添加到队列中;没有 socket.afterSend 可以让我正确排队,这就是我陷入困境的地方。


使用 Web Worker 进行大文件处理,而不是在主线程中进行处理,并使用以下命令上传文件数据块file.slice().

This article http://kongaraju.blogspot.in/2012/07/large-file-upload-more-than-1gb-using.html帮助您处理工作人员中的大文件。更改 XHR 在主线程中发送到 Websocket。

//Messages from worker
function onmessage(blobOrFile) {
 ws.send(blobOrFile);
}

//construct file on server side based on blob or chunk information.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用WebSocket上传大文件 的相关文章