io上传文件到服务器被占用,使用socket.io-stream将文件从服务器流传输到客户端

小编典典

这是我正在使用的工作示例。但是以某种方式(也许仅以我为例),这可能会非常缓慢。

//== Server Side

ss(socket).on('filedownload', function (stream, name, callback) {

//== Do stuff to find your file

callback({

name : "filename",

size : 500

});

var MyFileStream = fs.createReadStream(name);

MyFileStream.pipe(stream);

});

//== Client Side

/** Download a file from the object store

* @param {string} name Name of the file to download

* @param {string} originalFilename Overrules the file's originalFilename

* @returns {$.Deferred}

*/

function downloadFile(name, originalFilename) {

var deferred = $.Deferred();

//== Create stream for file to be streamed to and buffer to save chunks

var stream = ss.createStream(),

fileBuffer = [],

fileLength = 0;

//== Emit/Request

ss(mysocket).emit('filedownload', stream, name, function (fileError, fileInfo) {

if (fileError) {

deferred.reject(fileError);

} else {

console.log(['File Found!', fileInfo]);

//== Receive data

stream.on('data', function (chunk) {

fileLength += chunk.length;

var progress = Math.floor((fileLength / fileInfo.size) * 100);

progress = Math.max(progress - 2, 1);

deferred.notify(progress);

fileBuffer.push(chunk);

});

stream.on('end', function () {

var filedata = new Uint8Array(fileLength),

i = 0;

//== Loop to fill the final array

fileBuffer.forEach(function (buff) {

for (var j = 0; j < buff.length; j++) {

filedata[i] = buff[j];

i++;

}

});

deferred.notify(100);

//== Download file in browser

downloadFileFromBlob([filedata], originalFilename);

deferred.resolve();

});

}

});

//== Return

return deferred;

}

var downloadFileFromBlob = (function () {

var a = document.createElement("a");

document.body.appendChild(a);

a.style = "display: none";

return function (data, fileName) {

var blob = new Blob(data, {

type : "octet/stream"

}),

url = window.URL.createObjectURL(blob);

a.href = url;

a.download = fileName;

a.click();

window.URL.revokeObjectURL(url);

};

}());

2020-07-07

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值