Files
trpic/web/scripts/upload/upload.js
Hubert Chen cd9e4c3666 adjust preview image style
add debug flag to reload web assets on every web page request
adjust `utils.NotFoundClose` function to show clear error message
change artwork id page nav button to `home`
2026-02-28 23:11:51 +08:00

68 lines
1.8 KiB
JavaScript

document.addEventListener("DOMContentLoaded", () => {
let infoBox = document.getElementById("info-box");
// 阻止默认行为
["dragenter", "dragover", "dragleave", "drop"].forEach((eventName) => {
infoBox.addEventListener(eventName, (e) => e.preventDefault());
});
// 拖入高亮
["dragenter", "dragover"].forEach((eventName) => {
infoBox.addEventListener(eventName, () => {
infoBox.style.backgroundColor = "rgb(50, 50, 50)";
});
});
// 拖出取消高亮
["dragleave", "drop"].forEach((eventName) => {
infoBox.addEventListener(eventName, () => {
infoBox.style.backgroundColor = "rgb(30, 30, 30)";
});
});
// 处理文件
infoBox.addEventListener("drop", (e) => {
const files = e.dataTransfer.files;
if (files.length === 0) return;
let token = localStorage.getItem("upload_token");
if (!token) {
token = prompt("Input token:");
if (!token) return;
}
for (const file of files) {
uploadFile(file, token);
}
});
function uploadFile(file, token) {
const formData = new FormData();
formData.append("file", file);
formData.append("token", token);
fetch("api/files", {
method: "POST",
body: formData,
})
.then((response) => {
if (response.ok) {
infoBox.style.backgroundColor = "rgb(100, 130, 105)";
setTimeout(() => {
infoBox.style.backgroundColor = "rgb(30, 30, 30)";
resetGallery();
}, 1000);
localStorage.setItem("upload_token", token);
} else {
response.text().then((text) => {
alert(`Upload failed: ${text}`);
if (response.status === 401) localStorage.removeItem("upload_token");
});
}
})
.catch((err) => {
console.error(err);
alert(`Upload failed: ${err}`);
});
}
});