📎 파일 업로드 방식

✔ <form> 태그를 이용하는 방식 : 브라우저의 제한이 없어야 하는 경우에 사용

<form action="uploadFormAction" method="post" enctype="multipart/form-data">
public void uploadFormPost(MultipartFile[] uploadFile, Model model)
{
    for (MultipartFile multipartFile : uploadFile)
    {
        File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename());
        multipartFile.transferTo(saveFile); // 파일저장
    }
}

✔ Ajax를 이용하는 파일 업로드

<input type="file" name="uploadFile" multiple>
<button id="uploadBtn">Upload</button>

let formData = new FormData();
const inputFile = document.querySelector("input[name='uploadFile']");
let files= inputFile.files;

for(let i = 0; i < files.length; i++) {
    formData.append("uploadFile", files[i]);
}

fetch("/uploadAjaxAction",{
    method: "POST",
    body: formData
})
.then(response => alert("Uploaded"));
public void uploadAjaxPost(MultipartFile[] uploadFile)
{
    String uploadFolder = "C:\\\\upload";

    for(MultipartFile multipartFile : uploadFile)
    {
        String uploadFileName = multipartFile.getOriginalFilename();

        // IE는 파일 경로까지 가지고 옴
        uploadFileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\\\") + 1);

        File saveFile = new File(uploadFolder, uploadFileName);
        multipartFile.transferTo(saveFile); // 파일저장
    }
}

❗ 파일 업로드 시 고려해야 할 점

🔗파일 업로드 상세 처리

✔ 파일의 확장자나 크기의 사전 처리

const regex = new RegExp("(.*?)\\.(exe|sh|zip|alz)$");
const maxSize = 5242880; // 5MB

const checkExtenstion = (fileName, fileSize) => {
    if(fileSize >= maxSize) return false;
    if(regex.test(fileName)) return false;
    return true;
}

중복된 이름의 파일 처리