-
[Apache PDFBox] 코틀린 임시파일 및 내용 생성언어/Kotlin 2024. 6. 3. 09:52반응형
어떤 이미지나 내용으로 PDF를 만들기 위해서 이미지나 내용을 저장할 저장소가 필요하다. 저장소는 메모리일 수도 있고, HDD와 같은 물리적 저장장치일 수도 있다. 메모리에 저장해서 사용하는 것이 편리하겠지만, 메모리의 용량은 한정적이므로, 하드웨어에 저장했다가 일정부분씩 읽어 처리한다.
1. 로컬 - 임시파일 생성
로컬의 test.csv파일을 읽어, 임시파일에 저장한다.
import java.io.File import java.io.IOException fun main() { try { // 바탕화면에 있는 파일 val testFile = File("/Users/onestone/Desktop/test.csv") // temp_를 prefix로 하고, 확장자가 csv인 임시파일 생성 val temp = File.createTempFile("temp_", ".csv") val bufferedWriter = temp.bufferedWriter() testFile.bufferedReader().use { bufferedReader -> bufferedReader.forEachLine { bufferedWriter.write(it) bufferedWriter.newLine() } } // 파일의 마지막 라인에 endLine--- 추가 bufferedWriter.use { it.write("endLine---") } } catch (e: IOException) { println(e) } }
이렇게 로컬파일을 읽어서 새로운 파일을 만들어주는 경우도 있지만, 외부에서 파일을 업로드해주는 경우도 있다.
2. 스프링웹 - 임시파일 생성
Controller를 통해 외부에서 file을 전달받는다.
// FileUploadController.class import org.example.fileuploadspring.service.FileUploadService import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController import org.springframework.web.multipart.MultipartFile @RestController @RequestMapping("/v1", name = "파일 업로드") class FileUploadController(private val fileUploadService: FileUploadService) { @PostMapping("/files/upload", name = "업로드") fun requestUpload(@RequestParam file: MultipartFile): Boolean { return fileUploadService.upload(file) } }
Service에서 MultipartFile을 BufferedInputStream으로 변환한다.
// FileUploadService.class import org.springframework.stereotype.Service import org.springframework.web.multipart.MultipartFile import java.io.BufferedInputStream import java.io.File import java.io.IOException @Service class FileUploadService { fun upload(file: MultipartFile): Boolean { try { BufferedInputStream(file.inputStream).use { bufferedInputStream -> val temp = File.createTempFile("temp_", ".csv") val bufferedWriter = temp.bufferedWriter() bufferedInputStream.bufferedReader().use { bufferedReader -> bufferedReader.forEachLine { bufferedWriter.write(it) bufferedWriter.newLine() } } bufferedWriter.use { it.write("endLine---") } } } catch (e: IOException) { println(e) } return true } }
application.yaml 파일 10MB까지 업로드 가능하도록 설정한다.
# application.yaml # 기본값은 1048576 bytes = 1MB spring: servlet: multipart: maxFileSize: 10MB maxRequestSize: 10MB
포스트맨으로 파일을 전달해서 잘 돌아가는지 확인해본다.
반응형'언어 > Kotlin' 카테고리의 다른 글
[properties, env] 자바에서 시스템 환경변수 읽어오기 (0) 2024.04.20 [EffectiveKotlin] equals, hashcode 규약과 data class, jpa (0) 2022.06.01 [EffectiveKotlin] 상속보다는 컴포지션을 사용하라 (0) 2022.06.01 [Kotlin in Action, Effective Kotlin] 제네릭과 변성 variance (0) 2022.05.29 [Kotlin] - List의 합집합, 차집합, 교집합 (0) 2022.05.08