πβνμΌ νλ μ μ₯νλ μΌμλ, νμ₯μ±κ³Ό 보μμ λ΄μλ€ β FileUploadUtil μ€κ³κΈ°β
π 2025λ 4μ 28μΌ | βοΈ by λ°μ°¬ν¬ |
π§ μ λ§λ€μλ? λ¨μ μ μ₯μΌλ‘λ λΆμ‘±νλ€
κ°μ νλ«νΌμμ νμΌ μ λ‘λκ° μΌμμ΄λ€.
μΈλ€μΌ, μμ, μλ§, PDF λ± κ°κΈ° λ€λ₯Έ 리μμ€λ€μ΄ μ¬μ©μ μμ νκ³ μλ²μ μ μ₯λλ€.
κ·Έλ°λ°, λ¨μν FileOutputStream
μΌλ‘ μ μ₯λ§ νλ€λ©΄?
- κ²½λ‘κ° κΌ¬μ΄κ³ ,
- JSPμμ μ κ·Όμ΄ λ³΅μ‘ν΄μ§κ³ ,
- μΆν AWS S3 κ°μ μΈλΆ μ μ₯μλ‘μ μ΄κ΄μ΄ λΆκ°λ₯ν μ½λκ° λλ€.
κ·Έλμ λλ βμ§μ§ μ νΈλ¦¬ν°λ΅κ² μλνλ νμΌ μ μ₯ ν΄λμ€βλ₯Ό λ§λ€κΈ°λ‘ νλ€.
κ²½λ‘ κ΄λ¦¬, 보μ, νμ₯μ±, JSP μΆμνκΉμ§ λͺ¨λ ν λ²μ μ‘μ μ μλλ‘.
π― ꡬν λͺ©ν μμ½
μꡬμ¬ν | μ€λͺ |
---|---|
π ꡬ쑰νλ μ μ₯ κ²½λ‘ | thumb/ , video/ , subtitle/ λ±μΌλ‘ κ΅¬λΆ μ μ₯ |
π UUID νμΌλͺ | μ€λ³΅ λ°©μ§ + μ¬μ©μ νμΌλͺ 보μ μΆμν |
π JSP μ κ·Ό κ²½λ‘ μλ μμ± | μλ² λλ ν 리 ꡬ쑰μ 무κ΄ν /upload/... κ²½λ‘ λ°ν |
π₯ μμΈ μ²λ¦¬ | μ μ₯ μ€ν¨μ μ νν μμΈ throw |
π§ νμ₯μ± | λ‘컬 μΈ S3, NAS λ±μΌλ‘ μ½κ² μ ν κ°λ₯ν΄μΌ ν¨ |
𧩠ꡬν μ½λ (ν΅μ¬ μμ½)
public class FileUploadUtil {
public static String saveFileToLocal(String subDir, String fileName, byte[] fileBytes, String baseDir) throws IOException {
File dir = new File(baseDir + "/" + subDir);
if (!dir.exists()) dir.mkdirs(); // β νμ λλ ν 리κΉμ§ μλ μμ±
File file = new File(dir, fileName);
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(fileBytes); // β
μ€μ νμΌ μ μ₯
}
return "/upload/" + subDir + "/" + fileName; // π JSP μ κ·Όμ© μλ κ²½λ‘ λ°ν
}
}
π‘ ꡬν μ² ν
- μμ Java μ νΈ: μμ‘΄μ± μλ
static
κ΅¬μ‘°λ‘ κ°λ³κ³ μ΄μμ± λμ - κ²½λ‘ μΆμν: μ€μ μ μ₯ κ²½λ‘ β JSP κ²½λ‘λ₯Ό λͺ νν λΆλ¦¬
- μμΈ μ²λ¦¬ μμ:
IOException
μ λ°μΌλ‘ throw β Controller λ¨μμ μ¬μ©μ λ©μμ§ λΆλ¦¬ λμ κ°λ₯
π 보μμ κ³ λ €ν μ€κ³ μμ
보μ 리μ€ν¬ | λμ μ λ΅ |
---|---|
λλ ν 리 νΈλλ²μ€ (../ ) |
subDir , fileName μμ .. λ± νΉμ λ¬Έμ νν°λ§ (μΆν κ°μ κ°λ₯) |
μ€ν νμΌ μ λ‘λ | .exe , .jsp λ± νμ©λμ§ μμ νμ₯μ β Controllerμμ reject |
μ μ₯ κ²½λ‘ λ ΈμΆ | /upload/** λ Tomcat static 리μμ€λ‘λ§ λ§€ν, λ΄λΆ μ μ₯ ꡬ쑰λ κ°μΆ€ |
νλμ½λ© μν | baseDir μ application.properties λ±μΌλ‘ μΈλΆ μ€μ ν μμ |
π§ͺ ν μ€νΈ μλλ¦¬μ€ & κ²μ¦ κ²°κ³Ό
μλλ¦¬μ€ | κΈ°λ κ²°κ³Ό |
---|---|
μΈλ€μΌ μ μ₯ | /upload/thumb/lecture-uuid.png κ²½λ‘ λ°ν |
10MB μμ μ μ₯ | C:/lecture_uploads/video/uuid.mp4 μ μ μ μ₯ νμΈ |
λμ€ν¬ full | IOException λ°μ β 컨νΈλ‘€λ¬μμ μ¬μ©μ μλ¬ μ²λ¦¬ |
νκΈ νμΌλͺ | νκΈκ°μ.mp4 λ¬Έμ μμ΄ μ μ₯ (UTF-8 보μ₯ νκ²½) |
π§± μ€μ μ¬μ© μμ
πΌ Controller λ¨
String uuid = UUID.randomUUID().toString();
String fileName = "lecture-" + uuid + ".jpg";
String savedUrl = FileUploadUtil.saveFileToLocal("thumb", fileName, imageBytes, BASE_DIR);
πΌ JSP λ¨
<img src="${savedUrl}" alt="κ°μ μΈλ€μΌ">
β JSPλ λ μ΄μ μ μ₯ κ²½λ‘λ₯Ό λͺ°λΌλ λλ€.
λ¨μ§
/upload/
λ‘ μμνλ μλ URLλ§ μλ©΄ λμ΄λ€.
π§ κΈ°μ μ ν€μλ μμ½
ν€μλ | μλ―Έ |
---|---|
FileOutputStream |
Java I/O κΈ°λ° νμΌ μ μ₯μ κΈ°λ³Έ |
try-with-resources |
μμ μλ ν΄μ β λ©λͺ¨λ¦¬ λμ μλ°© |
mkdirs() |
μ‘΄μ¬νμ§ μλ λͺ¨λ νμ λλ ν 리κΉμ§ μμ± |
JSP κ²½λ‘ μΆμν | μ μ₯μ κ²½λ‘μ ν΄λΌμ΄μΈνΈ μ κ·Ό κ²½λ‘ λΆλ¦¬ |
μμ μ νΈλ¦¬ν°ν | μν μλ static ν¨μ β ν
μ€νΈμ νμ₯μ μ΅μ |
π± ν₯ν νμ₯ κ³ν
-
FileUploadStrategy
μΈν°νμ΄μ€ λμβ
LocalUploadStrategy
,S3UploadStrategy
,NASUploadStrategy
λ± κ΅¬ν체 κ΅μ²΄λ§μΌλ‘ μ μ₯ λ°©μ λ³κ²½ κ°λ₯ -
MIME νμ μλ λΆκΈ°
β μ΄λ―Έμ§, μμ, μλ§μ λ°λΌ μλμΌλ‘
thumb/
,video/
,subtitle/
λλ ν 리 μ§μ -
μ λ‘λ λ‘κ·Έ κΈ°λ‘
β μ λ‘λ μκ°, μ μ ID, IP, νμΌλͺ λ±μ DBμ μ μ₯νμ¬ λ³΄μ κ°μ¬ κ°λ₯
β μ΅μ’ κ²°κ³Ό & νκ³
- JSP κΈ°λ° μΉ μμ€ν μμ μμ μ μΈ μ λ‘λ κ²½λ‘ κ΄λ¦¬ 체κ³λ₯Ό μμ±
- μ½λ ꡬ쑰λ λ¨μΌ μ± μ μμΉ(SRP)μ λ°λ₯΄λ©°, κ° λ μ΄μ΄μμ μν λΆλ¦¬κ° λͺ ν
- 컨νΈλ‘€λ¬μμ μ μ₯ κ²½λ‘λ I/O κ΄λ ¨ 볡μ‘λλ₯Ό μ κ²½ μ°μ§ μμλ λ¨
- λ€μν λλ©μΈ(
κ°μ
,λ©ν λ§
,μΉ΄νΈ μ΄λ―Έμ§
)μμ μ¬μ¬μ© μ€
βνμΌ μ μ₯μ λ¨μν μμ μ²λΌ 보μ΄μ§λ§,
κ²½λ‘ μ€κ³, μμΈ νλ¦, 보μ, μΆμνλ₯Ό κ³ λ―Όνμ§ μμΌλ©΄ κΈμΈ μ μ§λ³΄μ μ§μ₯μ΄ λλ€.β
μ΄ μ νΈ νλλ‘, νμΌ μ μ₯ λ‘μ§μ μ΄μ λ μ΄μ λλ₯Ό κ΄΄λ‘νμ§ μλλ€.