Fix file upload path issues with Korean filenames
- Replace complex filename sanitization with simple timestamp-based naming - Generate safe filenames using timestamp and random strings - Store original filename in database, use safe names in storage - Remove Korean characters and special characters from storage paths - Preserve file extensions for proper file type handling This resolves: "Invalid key" errors with Korean filenames in Supabase Storage 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
16
script.js
16
script.js
@@ -69,6 +69,15 @@ class FileManager {
|
|||||||
return Date.now().toString(36) + Math.random().toString(36).substr(2);
|
return Date.now().toString(36) + Math.random().toString(36).substr(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 파일 확장자 추출 (안전한 형태로)
|
||||||
|
getFileExtension(fileName) {
|
||||||
|
const lastDotIndex = fileName.lastIndexOf('.');
|
||||||
|
if (lastDotIndex > 0 && lastDotIndex < fileName.length - 1) {
|
||||||
|
return fileName.substring(lastDotIndex).toLowerCase();
|
||||||
|
}
|
||||||
|
return ''; // 확장자가 없는 경우
|
||||||
|
}
|
||||||
|
|
||||||
// 인증 관련 메서드들
|
// 인증 관련 메서드들
|
||||||
async initializeAuth() {
|
async initializeAuth() {
|
||||||
try {
|
try {
|
||||||
@@ -511,9 +520,10 @@ class FileManager {
|
|||||||
const response = await fetch(attachment.data);
|
const response = await fetch(attachment.data);
|
||||||
const blob = await response.blob();
|
const blob = await response.blob();
|
||||||
|
|
||||||
// 파일 경로 생성 (사용자별/파일ID별 폴더 구조)
|
// 안전한 파일명 생성 (고유한 이름으로 저장, 원본명은 DB에 저장)
|
||||||
const fileName = `${Date.now()}_${Math.random().toString(36).substr(2, 9)}_${attachment.name}`;
|
const fileExtension = this.getFileExtension(attachment.name);
|
||||||
const filePath = `${this.currentUser.id}/${fileId}/${fileName}`;
|
const safeFileName = `${Date.now()}_${Math.random().toString(36).substr(2, 9)}${fileExtension}`;
|
||||||
|
const filePath = `${this.currentUser.id}/${fileId}/${safeFileName}`;
|
||||||
|
|
||||||
// Supabase Storage에 업로드
|
// Supabase Storage에 업로드
|
||||||
const uploadResult = await SupabaseHelper.uploadFile(blob, filePath);
|
const uploadResult = await SupabaseHelper.uploadFile(blob, filePath);
|
||||||
|
Reference in New Issue
Block a user