feat: 将截图上传逻辑从直接文件上传改为客户端base64编码处理,并增加了图片类型校验。

This commit is contained in:
zulifeng 2026-01-30 11:26:18 +08:00
parent feed4f84c8
commit 01927310cf

View File

@ -3238,35 +3238,45 @@ document.addEventListener("DOMContentLoaded", function () {
input.addEventListener("change", async function () {
if (!this.files.length) return;
const formData = new FormData();
for (const file of this.files) {
formData.append("screenshots", file);
}
const files = Array.from(this.files);
const newBase64Images = [];
try {
const response = await authenticatedFetch("/api/upload", {
method: "POST",
body: formData,
});
if (response.ok) {
const data = await response.json();
const filePaths = data.filePaths || [];
if (type === "create") {
createUploadedScreenshots = [
...createUploadedScreenshots,
...filePaths,
];
renderScreenshotPreviews("create", createUploadedScreenshots);
} else {
editUploadedScreenshots = [...editUploadedScreenshots, ...filePaths];
renderScreenshotPreviews("edit", editUploadedScreenshots);
}
for (const file of files) {
// 验证是否为图片
if (!file.type.startsWith("image/")) {
console.warn(`File is not an image: ${file.name}`);
continue;
}
try {
const base64 = await new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = (error) => reject(error);
reader.readAsDataURL(file);
});
newBase64Images.push(base64);
} catch (error) {
console.error(`Error converting file ${file.name} to base64:`, error);
}
} catch (error) {
console.error("Error uploading screenshots:", error);
}
if (type === "create") {
createUploadedScreenshots = [
...createUploadedScreenshots,
...newBase64Images,
];
renderScreenshotPreviews("create", createUploadedScreenshots);
} else {
editUploadedScreenshots = [
...editUploadedScreenshots,
...newBase64Images,
];
renderScreenshotPreviews("edit", editUploadedScreenshots);
}
// 清除 input以便再次选择同一张图片
this.value = "";
});
}