Skip to content

Commit

Permalink
feat: limit the number of concurrent uploads (#98)
Browse files Browse the repository at this point in the history
  • Loading branch information
sigoden authored Jul 6, 2022
1 parent 76e967f commit 05dbcfb
Showing 1 changed file with 30 additions and 3 deletions.
33 changes: 30 additions & 3 deletions assets/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class Uploader {
}

upload() {
const { file, idx, name } = this;
const { idx, name } = this;
const url = getUrl(name);
const encodedUrl = encodedStr(url);
const encodedName = encodedStr(name);
Expand All @@ -70,8 +70,15 @@ class Uploader {
$uploadersTable.classList.remove("hidden");
$emptyFolder.classList.add("hidden");
this.$uploadStatus = document.getElementById(`uploadStatus${idx}`);
this.lastUptime = Date.now();
this.$uploadStatus.innerHTML = '-';
Uploader.queues.push(this);
Uploader.runQueue();
}

ajax() {
Uploader.runings += 1;
const url = getUrl(this.name);
this.lastUptime = Date.now();
const ajax = new XMLHttpRequest();
ajax.upload.addEventListener("progress", e => this.progress(e), false);
ajax.addEventListener("readystatechange", () => {
Expand All @@ -86,8 +93,9 @@ class Uploader {
ajax.addEventListener("error", () => this.fail(), false);
ajax.addEventListener("abort", () => this.fail(), false);
ajax.open("PUT", url);
ajax.send(file);
ajax.send(this.file);
}


progress(event) {
const now = Date.now();
Expand All @@ -103,15 +111,34 @@ class Uploader {

complete() {
this.$uploadStatus.innerHTML = `✓`;
Uploader.runings -= 1;
Uploader.runQueue();
}

fail() {
this.$uploadStatus.innerHTML = `✗`;
Uploader.runings -= 1;
Uploader.runQueue();
}
}

Uploader.globalIdx = 0;

Uploader.runings = 0;

/**
* @type Uploader[]
*/
Uploader.queues = [];


Uploader.runQueue = () => {
if (Uploader.runings > 2) return;
let uploader = Uploader.queues.shift();
if (!uploader) return;
uploader.ajax();
}

/**
* Add breadcrumb
* @param {string} href
Expand Down

0 comments on commit 05dbcfb

Please sign in to comment.