summaryrefslogtreecommitdiff
path: root/app/api/upload/basicContract/chunk/route.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/api/upload/basicContract/chunk/route.ts')
-rw-r--r--app/api/upload/basicContract/chunk/route.ts156
1 files changed, 85 insertions, 71 deletions
diff --git a/app/api/upload/basicContract/chunk/route.ts b/app/api/upload/basicContract/chunk/route.ts
index 383a8f36..db3d591e 100644
--- a/app/api/upload/basicContract/chunk/route.ts
+++ b/app/api/upload/basicContract/chunk/route.ts
@@ -33,83 +33,97 @@ export async function POST(request: NextRequest) {
console.log(`πŸ“¦ 청크 μ €μž₯ μ™„λ£Œ: ${chunkIndex + 1}/${totalChunks} (${buffer.length} bytes)`);
// λ§ˆμ§€λ§‰ 청크인 경우 λͺ¨λ“  청크λ₯Ό 합쳐 μ΅œμ’… 파일 생성
- if (chunkIndex === totalChunks - 1) {
- console.log(`πŸ”„ 파일 병합 μ‹œμž‘: ${filename}`);
-
- try {
- // λͺ¨λ“  청크λ₯Ό μˆœμ„œλŒ€λ‘œ μ½μ–΄μ„œ 병합
- const chunks: Buffer[] = [];
- let totalSize = 0;
-
- for (let i = 0; i < totalChunks; i++) {
- const chunkData = await readFile(path.join(tempDir, `chunk-${i}`));
- chunks.push(chunkData);
- totalSize += chunkData.length;
- }
-
- // λͺ¨λ“  청크λ₯Ό ν•˜λ‚˜μ˜ Buffer둜 병합
- const mergedBuffer = Buffer.concat(chunks, totalSize);
-
- const mergedFile = new File([mergedBuffer], filename, {
- type: chunk.type || 'application/octet-stream',
- lastModified: Date.now(),
- });
-
- const saveResult = await saveDRMFile(
- mergedFile,
- decryptWithServerAction, // λ³΅ν˜Έν™” ν•¨μˆ˜
- 'basicContract/template', // μ €μž₯ 디렉토리
- // userId // 선택
- );
+// λ§ˆμ§€λ§‰ 청크인 경우 λͺ¨λ“  청크λ₯Ό 합쳐 μ΅œμ’… 파일 생성
+if (chunkIndex === totalChunks - 1) {
+ console.log(`πŸ”„ 파일 병합 μ‹œμž‘: ${filename}`);
+
+ try {
+ // λͺ¨λ“  청크λ₯Ό μˆœμ„œλŒ€λ‘œ μ½μ–΄μ„œ 병합
+ const chunks: Buffer[] = [];
+ let totalSize = 0;
+
+ for (let i = 0; i < totalChunks; i++) {
+ const chunkData = await readFile(path.join(tempDir, `chunk-${i}`));
+ chunks.push(chunkData);
+ totalSize += chunkData.length;
+ }
+
+ // λͺ¨λ“  청크λ₯Ό ν•˜λ‚˜μ˜ Buffer둜 병합
+ const mergedBuffer = Buffer.concat(chunks, totalSize);
+ console.log(`πŸ“„ 병합 μ™„λ£Œ: ${filename} (총 ${totalSize} bytes)`);
+ // ν™˜κ²½μ— λ”°λ₯Έ μ €μž₯ 방식 선택
+ const isProduction = process.env.NODE_ENV === 'production';
+ let saveResult;
-
- console.log(`πŸ“„ 병합 μ™„λ£Œ: ${filename} (총 ${totalSize} bytes)`);
+ if (isProduction) {
+ // Production: DRM 파일 처리
+ console.log(`πŸ” Production ν™˜κ²½ - DRM 파일 처리: ${filename}`);
+
+ const mergedFile = new File([mergedBuffer], filename, {
+ type: chunk.type || 'application/octet-stream',
+ lastModified: Date.now(),
+ });
- // 곡용 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 μ €μž₯
- // const saveResult = await saveBuffer({
- // buffer: mergedBuffer,
- // fileName: filename,
- // directory: 'basicContract/template',
- // originalName: filename
- // });
+ saveResult = await saveDRMFile(
+ mergedFile,
+ decryptWithServerAction, // λ³΅ν˜Έν™” ν•¨μˆ˜
+ 'basicContract/template', // μ €μž₯ 디렉토리
+ // userId // 선택사항
+ );
+ } else {
+ // Development: 일반 파일 μ €μž₯
+ console.log(`πŸ› οΈ Development ν™˜κ²½ - 일반 파일 μ €μž₯: ${filename}`);
+
+ saveResult = await saveBuffer({
+ buffer: mergedBuffer,
+ fileName: filename,
+ directory: 'basicContract/template',
+ originalName: filename
+ });
+ }
- // μž„μ‹œ 파일 정리 (λΉ„λ™κΈ°λ‘œ 처리)
- rm(tempDir, { recursive: true, force: true })
- .then(() => console.log(`πŸ—‘οΈ μž„μ‹œ 파일 정리 μ™„λ£Œ: ${fileId}`))
- .catch((e: unknown) => console.error('청크 정리 였λ₯˜:', e));
+ // μž„μ‹œ 파일 정리 (λΉ„λ™κΈ°λ‘œ 처리)
+ rm(tempDir, { recursive: true, force: true })
+ .then(() => console.log(`πŸ—‘οΈ μž„μ‹œ 파일 정리 μ™„λ£Œ: ${fileId}`))
+ .catch((e: unknown) => console.error('청크 정리 였λ₯˜:', e));
- if (saveResult.success) {
- console.log(`βœ… μ΅œμ’… 파일 μ €μž₯ μ™„λ£Œ: ${saveResult.fileName}`);
-
- return NextResponse.json({
- success: true,
- fileName: filename,
- filePath: saveResult.publicPath,
- hashedFileName: saveResult.fileName,
- fileSize: totalSize
- });
- } else {
- console.error('파일 μ €μž₯ μ‹€νŒ¨:', saveResult.error);
- return NextResponse.json({
- success: false,
- error: saveResult.error || '파일 μ €μž₯에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€'
- }, { status: 500 });
- }
-
- } catch (mergeError) {
- console.error('파일 병합 였λ₯˜:', mergeError);
-
- // 였λ₯˜ λ°œμƒ μ‹œ μž„μ‹œ 파일 정리
- rm(tempDir, { recursive: true, force: true })
- .catch((e: unknown) => console.error('μž„μ‹œ 파일 정리 였λ₯˜:', e));
-
- return NextResponse.json({
- success: false,
- error: '파일 병합 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€'
- }, { status: 500 });
- }
+ if (saveResult.success) {
+ const envPrefix = isProduction ? 'πŸ”' : 'πŸ› οΈ';
+ console.log(`${envPrefix} μ΅œμ’… 파일 μ €μž₯ μ™„λ£Œ: ${saveResult.fileName}`);
+
+ return NextResponse.json({
+ success: true,
+ fileName: filename,
+ filePath: saveResult.publicPath,
+ hashedFileName: saveResult.fileName,
+ fileSize: totalSize,
+ environment: isProduction ? 'production' : 'development',
+ processingType: isProduction ? 'DRM' : 'standard'
+ });
+ } else {
+ const envPrefix = isProduction ? 'πŸ”' : 'πŸ› οΈ';
+ console.error(`${envPrefix} 파일 μ €μž₯ μ‹€νŒ¨:`, saveResult.error);
+ return NextResponse.json({
+ success: false,
+ error: saveResult.error || '파일 μ €μž₯에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€',
+ environment: isProduction ? 'production' : 'development'
+ }, { status: 500 });
}
+
+ } catch (mergeError) {
+ console.error('파일 병합 였λ₯˜:', mergeError);
+
+ // 였λ₯˜ λ°œμƒ μ‹œ μž„μ‹œ 파일 정리
+ rm(tempDir, { recursive: true, force: true })
+ .catch((e: unknown) => console.error('μž„μ‹œ 파일 정리 였λ₯˜:', e));
+
+ return NextResponse.json({
+ success: false,
+ error: '파일 병합 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€'
+ }, { status: 500 });
+ }
+}
return NextResponse.json({
success: true,