-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path分片下载后端的文件
71 lines (67 loc) · 2.96 KB
/
分片下载后端的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
exportSlidesRequest(id,want_db,filename){
return new Promise((r)=>{
axios({
headers: {'Content-Type': ' application/x-www-form-urlencoded'},
method: 'post',
url: `/aipath/api/files/download`,
data: qs.stringify({caseid:id,want_db,companyid:userInfo().company}),
responseType:'blob',
getResponse:true
})
.then(async (res)=> {
let contentType = res.headers['content-type'];
if(contentType==='application/json') r(0)
else{
let blob = new Blob([res.data]);
let fileSize = blob.size;
filename = filename?filename:res.headers['content-disposition'].split('=')[1];
let chunkSize = 20*1024*1024;
var writeStream1 = new fs.createWriteStream(this.folder+'\\'+filename);
console.log('下载完成:'+filename)
writeStream1
.on('error', (err) => {
console.log('error')
r('error')
})
.on('finish',async () => {
console.log('下载完成:'+filename)
r('done')
});
for (let start = 0; start < fileSize; start += chunkSize) {
let chunk = blob.slice(start, start + chunkSize);
if((start + chunkSize)>fileSize){
chunk = blob.slice(start, fileSize + 1);
}
let curBuff = await getBuffer(chunk);
var passThrough1 = new stream.PassThrough().end(toBuffer(curBuff));
if((start + chunkSize)>fileSize){
passThrough1.pipe(writeStream1)
}
else{
passThrough1.pipe(writeStream1,{end:false})
}
}
function toBuffer(ab) {
var buf = new Buffer(ab.byteLength);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
buf[i] = view[i];
}
return buf;
}
function getBuffer(chunk){
return new Promise(r=>{
let reader = new FileReader();
reader.readAsArrayBuffer(chunk);
reader.onload = (e)=>{
r(e.target.result)
}
})
}
}
})
.catch((e)=> {
r('error')
});
})
},