[Spring Boot] 파일 다운로드 로직 구현 feat.Nuxt3

2023. 7. 12. 14:48·프로그래밍 일기/Java & Spring
반응형
파일 업로드 로직
 

[Spring Boot] 단일, 다중 파일 업로드 로직 구현 feat.Nuxt3

버전 정보 자바 11 Spring Boot 2.7.13 Nuxt 3.6.2 마이바티스 2.3.1 FileUtil.java Controller나 Service에 직접 작성해도 무관하나 따로 Util파일을 만들어 관리하는 것이 좋습니다. CommonController.java package com.example.t

taeme.tistory.com

 

버전 정보

자바 11

Spring Boot 2.7.13

 

들어가기에 앞서

해당 로직을 무조건 FileUtil을 만들어서 진행할 필요는 없습니다. 필요에 따라 Controller에 FileUtils 로직을 작성하여 구현하셔도 됩니다. 하지만 저는 프로세스 과정을 다른 로직들과 동일하게 하고 싶어 Controller와 Service를 구현하여 작성했습니다.

 

CommonController.java
@GetMapping("/file/download")
public ResponseEntity<Object> downloadFile(@RequestParam Map params) throws Exception {
    return commonService.downloadFile(params);
}

 

CommonService.java
public ResponseEntity<Object> downloadFile(Map params) throws Exception {
    return fileUtil.fileDownload(commonMapper.loadFile(params).get(0));
}

 

CommonMapper.java
List<Map> loadFile(Map params) throws Exception;

 

CommonMapper.xml
<select id="loadFile" resultType="Map">
    /* loadFile */
    SELECT *
    FROM FILE_MASTER
    <if test='fileId != "" and fileId != null'>
    WHERE FILE_ID = #{fileId}
    </if>
    ORDER BY FILE_ID DESC
</select>

 

FileUtil

package com.example.testapi.config.util;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Component
public class FileUtil {

    @Value("${server.file.path}")
    private String serverFilePath;

    //파일 다운로드
    public ResponseEntity<Object> fileDownload (Map params) throws Exception {
        String folderPath = params.get("FILE_PATH").toString();
        String originalFileName = params.get("ORIGINAL_FILE_NAME").toString();
        String path = serverFilePath + folderPath;

        try {
            Path filePath = Paths.get(path);
            Resource resource = new InputStreamResource(Files.newInputStream(filePath)); // 파일 resource 얻기

            HttpHeaders headers = new HttpHeaders();
            headers.setContentDisposition(ContentDisposition.builder("attachment").filename(originalFileName).build());  // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더

            return new ResponseEntity<Object>(resource, headers, HttpStatus.OK);
        } catch(Exception e) {
            return new ResponseEntity<Object>(null, HttpStatus.CONFLICT);
        }
    }
}

String folderPath, path 같은 경우 저는 DB에서 정보를 조회한 후 가져오기 때문에 위와 같이 설정되어 있고 만약 하드코딩으로 넣고싶다면 그렇게 하셔도 무관합니다. ex) C:/user/Desktop 등

 

application.properties
# 파일 업로드 서버 경로
server.file.path=D:/Users/wbsoft/Desktop/

위 fileUtils에서 직접 입력한다면 없어도 무관합니다.

 

vue 파일
location.href='http://localhost:8080/file/download?fileId=' + fileId;

$fetch나 useFetch를 통해 get통신을 할 경우에는 특정 라이브러리가 필요하다고 알고 있습니다. 해당 두 함수는 vue에서 값을 받아오고 location은 브라우저에서 file 값을 받아오기 때문에 차이가 있는 것 같습니다.

반응형
저작자표시

'프로그래밍 일기 > Java & Spring' 카테고리의 다른 글

자바 스프링 메일 안에 이미지 추가하는 방법  (0) 2023.07.18
[에러해결] javax.mail.MessagingException: Could not connect to SMTP host: smtp.worksmobile.com, port: 465, response: -1 (isSSL true 설정)  (0) 2023.07.18
[Spring Boot] 단일, 다중 파일 업로드 로직 구현 feat.Nuxt3  (0) 2023.07.12
[Spring Boot] 이메일 발송 로직 구현, 인증번호 보내기  (1) 2023.07.10
[Spring Boot] RestTemplate 사용법 서버 간 통신 getForEntity, postForEntity  (0) 2023.07.10
'프로그래밍 일기/Java & Spring' 카테고리의 다른 글
  • 자바 스프링 메일 안에 이미지 추가하는 방법
  • [에러해결] javax.mail.MessagingException: Could not connect to SMTP host: smtp.worksmobile.com, port: 465, response: -1 (isSSL true 설정)
  • [Spring Boot] 단일, 다중 파일 업로드 로직 구현 feat.Nuxt3
  • [Spring Boot] 이메일 발송 로직 구현, 인증번호 보내기
MakeMe
MakeMe
제가 포스팅한 글 중 잘못된 부분이 있으면 알려주세요!
  • MakeMe
    Developer blog
    MakeMe
    • 모든 글 (71)
      • 프로그래밍 일기 (57)
        • Java & Spring (21)
        • Python & Flask (3)
        • Linux (12)
        • Front-End (10)
        • DB & SQL (6)
        • Git (3)
        • IDE (2)
      • 자격증 (7)
        • 정보처리기능사 (2)
        • SQLD (1)
        • SW개발_L5 (1)
        • AWS (3)
      • 독립일기 (7)
        • 중소기업청년대출 (7)
  • 인기 글

  • 태그

    flask 세팅
    자바
    AWS
    중기청후기
    중소기업청년대출
    psql
    자동배포설정
    중기청필수서류
    스프링
    java
    DBeaver
    젠킨스 자동 배포
    Vue
    인텔리제이
    MYSQL
    nuxt3
    springboot
    Spring
    자바환경변수
    젠킨스 우분투 설치
    스프링부트
    nuxt
    건강보험자격득실확인서
    중기청서류
    중기청필요서류
    DB
    IntelliJ
    flask
    넉스트
    고용보험내역서
  • hELLO· Designed By정상우.v4.10.1
MakeMe
[Spring Boot] 파일 다운로드 로직 구현 feat.Nuxt3
상단으로

티스토리툴바