[Spring] 다중 파일 업로드, 수정

seonjeong·2023년 5월 2일
0

Spring

목록 보기
17/27
post-thumbnail

💖 다중 파일 업로드

받아온 데이터를 List<MultipartFile>로 변환시킨 후, 각각의 파일을 업로드 한다

@PostMapping(value = "fileupload")
public String fileupload(@RequestParam(value="fileList", required=false) 
						  List<MultipartFile> files,
  						  HttpServletRequest request) {
  
  // 출력 확인
  for(int i = 0; i < files.size(); i++) {
    System.out.println(files.get(i).getOriginalFilename());
  }
    
  // 파일 upload 경로
  String path = request.getServletContext().getRealPath("경로");
  System.out.println(" fileUpload path = " + path);
  
  // 파일 업로드
  int size = files.size();

  for(int i = 0; i < size; i++) {
    MultipartFile file = files.get(i);
    String fileName = file.getOriginalFilename();
    
    File file = new File(path + "/" + fileName);
				
    try {
      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
      bos.write(files.get(i).getBytes());
      bos.close();
    } catch (Exception e) {
      return "file upload fail";
    }
  }
  return "file upload success";
}



💖 다중 파일 수정

등록된 파일 목록들과 새롭게 수정한 파일 목록들을 비교하여

  1. 등록된 파일 목록들에 수정한 목록들이 없다면 해당 파일들을 삭제
  2. 반대의 경우 해당 파일을을 추가

🔥 파일 삭제

String fileuploaded_path = req.getServletContext().getRealPath("저장경로");
File dir = new File(fileuploaded_path);  
String[] filenamesList = dir.list();	// 등록된 파일 목록들

for(String filename : filenamesList) {
  if(!updatedFiles.contains(filename)) {	// 서버에 저장된 파일명과 수정된 파일명이 일치하지 않으면
    System.out.println("delete files : " + filename);

    File file = new File(fileuploaded_path + "/" + filename);
    file.delete();	// 해당 파일 삭제
  }
}

🔥 파일 추가

int size = addFiles.size();
String[] addFilepath = new String[size];	// 추가 파일경로를 저장할 배열

for(int i = 0; i < size; i++) {
  MultipartFile file = addFiles.get(i);
  String addFileName = file.getOriginalFilename();	// 추가 파일 원본 파일명

  addFilepath[i] = fileuploaded_path + "/" + addFileName;   
  
  File addFile = new File(addFilepath[i]);

  if(!addFile.exists()) {	// 해당 파일이 존재하지 않으면 파일 업로드
    try {
      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(addFile));
      bos.write(addFiles.get(i).getBytes());
      bos.close();
    } catch (Exception e) {
      return "file upload fail";
    } 
    return "file upload success";
}

🔥 전체 코드

@PostMapping(value = "updatefile")
public String updateproduct(@RequestParam("updateImg") List<String> updatedFiles,
  							@RequestParam("addFiles") List<MultipartFile> addFiles,
  							HttpServletRequest req) {

    // 파일 수정 : 파일 삭제 + 파일 추가
    String fileuploaded_path = req.getServletContext().getRealPath("저장경로");
    File dir = new File(fileuploaded_path);  
    String[] filenamesList = dir.list();	// 등록된 파일 목록들

    for(String filename : filenamesList) {
      if(!updatedFiles.contains(filename)) {	// 서버에 저장된 파일명과 수정된 파일명이 일치하지 않으면
        System.out.println("delete files : " + filename);

        File file = new File(fileuploaded_path + "/" + filename);
        file.delete();	// 해당 파일 삭제
      }
    }

    int size = addFiles.size();
    String[] addFilepath = new String[size];	// 추가 파일경로를 저장할 배열

   	 for(int i = 0; i < size; i++) {
     MultipartFile file = addFiles.get(i);
     String addFileName = file.getOriginalFilename();	// 추가 파일 원본 파일명

     addFilepath[i] = fileuploaded_path + "/" + addFileName;   

     File addFile = new File(addFilepath[i]);

     if(!addFile.exists()) {	// 해당 파일이 존재하지 않으면 파일 업로드
        try {
          BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(addFile));
          bos.write(addFiles.get(i).getBytes());
          bos.close();
        } catch (Exception e) {
          return "file upload fail";
        } 
        return "file upload success";
     }
}
profile
🦋개발 공부 기록🦋

0개의 댓글

관련 채용 정보