Files
trpic/web/scripts/upload/upload.js
2026-04-19 23:51:45 +08:00

97 lines
2.8 KiB
JavaScript

document.addEventListener("DOMContentLoaded", () => {
if (document.cookie.includes("_trpic_user")) {
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 = "";
});
});
// 处理文件
infoBox.addEventListener("drop", (e) => {
const files = e.dataTransfer.files;
let merge = false;
if (files.length === 0) return;
if (files.length > 1) {
merge = confirm("选择了多张图片,要组合为一个作品上传吗?")
}
let success = uploadFiles(files, merge);
if (success == true) {
infoBox.style.backgroundColor = "rgb(100, 130, 105)";
setTimeout(() => {
infoBox.style.backgroundColor = "rgb(30, 30, 30)";
resetGallery();
}, 1000);
}
});
}
async function uploadFiles(files, merge) {
let artwork;
let index = 0;
for (const file of files) {
if (!merge || index == 0) {
try {
const formData = new FormData();
formData.append("file", file);
const res = await fetch("/api/files", { method: "POST", body: formData });
const data = await res.json();
switch (res.status) {
case 201:
artwork = data;
break;
case 401:
alert("上传失败:需要验证");
break;
default:
alert(`上传失败:${data.msg}: ${data.error}`);
return false
}
} catch (error) {
alert(`请求失败: ${error}`);
}
} else if (artwork) {
try {
const formData = new FormData();
formData.append("file", file);
const res = await fetch(`/api/artworks/${artwork.id}/files`, { method: "POST", body: formData })
const data = await res.json();
switch (res.status) {
case 201:
break;
case 401:
alert("上传失败:需要验证");
break;
default:
alert(`上传失败:${data.msg}: ${data.error}`);
return false
}
} catch (error) {
alert(`请求失败: ${error}`);
return;
}
}
index++;
}
return true
}
});