From 823457a87c19bb828c3980618c1bb192d72eeddb Mon Sep 17 00:00:00 2001 From: zihanjian Date: Fri, 6 Jun 2025 16:51:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=92=8CCSV=E6=96=87=E4=BB=B6=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=9A=84=E6=94=AF=E6=8C=81=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=B1=BB=E5=9E=8B=E6=A3=80=E6=9F=A5=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=8F=90=E5=8D=87=E7=94=A8=E6=88=B7=E4=BD=93?= =?UTF-8?q?=E9=AA=8C=E5=92=8C=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/page.tsx | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 5177d29..9a5666c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -415,8 +415,25 @@ export default function Home() { const handleFileChange = (event: ChangeEvent) => { const file = event.target.files?.[0]; if (file) { - setExcludedColorKeys(new Set()); // ++ 重置排除列表 ++ - processFile(file); + // 检查文件类型是否支持 + const fileName = file.name.toLowerCase(); + const fileType = file.type.toLowerCase(); + + // 支持的图片类型 + const supportedImageTypes = ['image/jpeg', 'image/jpg', 'image/png']; + // 支持的CSV MIME类型(不同浏览器可能返回不同的MIME类型) + const supportedCsvTypes = ['text/csv', 'application/csv', 'text/plain']; + + const isImageFile = supportedImageTypes.includes(fileType) || fileType.startsWith('image/'); + const isCsvFile = supportedCsvTypes.includes(fileType) || fileName.endsWith('.csv'); + + if (isImageFile || isCsvFile) { + setExcludedColorKeys(new Set()); // ++ 重置排除列表 ++ + processFile(file); + } else { + alert(`不支持的文件类型: ${file.type || '未知'}。请选择 JPG、PNG 格式的图片文件,或 CSV 数据文件。\n文件名: ${file.name}`); + console.warn(`Unsupported file type: ${file.type}, file name: ${file.name}`); + } } // 重置文件输入框的值,这样用户可以重新选择同一个文件 if (event.target) { @@ -432,16 +449,24 @@ export default function Home() { if (event.dataTransfer.files && event.dataTransfer.files[0]) { const file = event.dataTransfer.files[0]; - // 更严格的文件类型检查 - const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png']; - const fileType = file.type.toLowerCase(); + // 使用与handleFileChange相同的文件类型检查逻辑 const fileName = file.name.toLowerCase(); + const fileType = file.type.toLowerCase(); - if (allowedTypes.includes(fileType) || file.type.startsWith('image/') || fileName.endsWith('.csv')) { + // 支持的图片类型 + const supportedImageTypes = ['image/jpeg', 'image/jpg', 'image/png']; + // 支持的CSV MIME类型(不同浏览器可能返回不同的MIME类型) + const supportedCsvTypes = ['text/csv', 'application/csv', 'text/plain']; + + const isImageFile = supportedImageTypes.includes(fileType) || fileType.startsWith('image/'); + const isCsvFile = supportedCsvTypes.includes(fileType) || fileName.endsWith('.csv'); + + if (isImageFile || isCsvFile) { setExcludedColorKeys(new Set()); // ++ 重置排除列表 ++ processFile(file); } else { - alert(`不支持的文件类型: ${file.type || '未知'}。请拖放 JPG、PNG 格式的图片文件,或 CSV 数据文件。`); + alert(`不支持的文件类型: ${file.type || '未知'}。请拖放 JPG、PNG 格式的图片文件,或 CSV 数据文件。\n文件名: ${file.name}`); + console.warn(`Unsupported file type: ${file.type}, file name: ${file.name}`); } } } catch (error) { @@ -1852,7 +1877,7 @@ export default function Home() { )} - + {/* Controls and Output Area */} {originalImageSrc && (