mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-18 17:48:52 +08:00
fix: 不支持流传输时的处理
This commit is contained in:
parent
08b30c5f7e
commit
4d0331d5e8
@ -205,9 +205,9 @@ export class ByteResource extends Resource<Uint8Array> {
|
|||||||
|
|
||||||
async load(_onProgress?: ProgressFn): Promise<Uint8Array> {
|
async load(_onProgress?: ProgressFn): Promise<Uint8Array> {
|
||||||
const response = await fetch(this.resolveURI());
|
const response = await fetch(this.resolveURI());
|
||||||
const data = await response.bytes();
|
const data = await response.arrayBuffer();
|
||||||
this.resource = data;
|
this.resource = new Uint8Array(data);
|
||||||
return data;
|
return this.resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
resolveURI(): string {
|
resolveURI(): string {
|
||||||
|
@ -99,21 +99,24 @@ export class StreamLoader
|
|||||||
this.stream = stream;
|
this.stream = stream;
|
||||||
const reader = response.body?.getReader();
|
const reader = response.body?.getReader();
|
||||||
const targets = [...this.target];
|
const targets = [...this.target];
|
||||||
// try {
|
|
||||||
await Promise.all(targets.map(v => v.start(stream, this, response)));
|
await Promise.all(targets.map(v => v.start(stream, this, response)));
|
||||||
|
if (reader && reader.read) {
|
||||||
// 开始流传输
|
// 开始流传输
|
||||||
while (true) {
|
while (true) {
|
||||||
const { value, done } = await reader.read();
|
const { value, done } = await reader.read();
|
||||||
await Promise.all(targets.map(v => v.pump(value, done, response)));
|
await Promise.all(
|
||||||
if (done) break;
|
targets.map(v => v.pump(value, done, response))
|
||||||
|
);
|
||||||
|
if (done) break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 如果不支持流传输
|
||||||
|
const buffer = await response.arrayBuffer();
|
||||||
|
const data = new Uint8Array(buffer);
|
||||||
|
await Promise.all(targets.map(v => v.pump(data, true, response)));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
targets.forEach(v => v.end(true));
|
targets.forEach(v => v.end(true));
|
||||||
// } catch (e) {
|
|
||||||
// logger.error(26, this.url, String(e));
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cancel(reason?: string) {
|
cancel(reason?: string) {
|
||||||
|
Loading…
Reference in New Issue
Block a user