Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- db
- Spring
- PL/SQL
- aws
- Spring Boot
- 알고리즘
- 페이징
- MST
- JPA
- 클라우드
- Kafka
- 쿼리
- 디자인 패턴
- DP
- golang
- 코딩
- MVC
- 운영체제
- Intellj
- feign
- 데이터베이스
- Spring Cloud Feign
- retry
- 백준
- 자바
- Spring Cloud
- SQL
- 오라클
- Jenkins
Archives
- Today
- Total
justgo_developer
Json File Download(HttpURLConnection, FeignClient) 본문
728x90
반응형
Json File Download(HttpURLConnection, FeignClient)
목차
- HttpURLConnection 이용한 파일 다운로드
- FeignClient 이용한 파일 다운로드
상세
1. HttpURLConnection 이용한 파일 다운로드
- InputStream : 파일 데이터를 읽거나 네트워크 소켓을 통해 데이터를 읽거나 키보드에서 입력한 데이터를 읽을 때 사용
- read(byte[] b): 배열 b의 크기만큼 데이터를 읽어와서 b에 저장한다.
- read(byte[] b, int off, int len) : len의 크기만큼 데이터를 읽어와서 배열 b의 off 위치부터 저장한다.
- FileOutputStream : 데이터를 파일에 바이트 스트림으로 저장하기 위해 사용한다.
주어진 이름의 파일을 쓰기 위한 객체를 생성하여 파일 생성됨
- write(byte[] b) : 배열 b에 저장된 모든 내용을 출력소스에 쓴다
- write(byte[] b, int off, int len) : 배열 b에 저장된 내용을 off 위치부터 len개 만큼 출력소스에 쓴다.
※ HttpURLConnection의 getInputStream() 메소드를 통해 응답 데이터를 읽을 수 있는 InputStream 객체를 얻을 수 있습니다.
※ InputStream read시 더 이상 읽은 바이트가 없으면 -1 리턴
public void downloadFile(String requestUrl) {
String outputDir = "C:/Code/file";
InputStream is = null;
FileOutputStream os = null;
try{
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
String fileName = "downloadTest" + System.currentTimeMillis() + ".json";
System.out.println("fileName = " + fileName);
File file = new File(outputDir);
if(!file.exists()) file.mkdirs();
is = conn.getInputStream();
os = new FileOutputStream(file + "/" + fileName);
int bytesRead;
byte[] buffer = new byte[1024];
while ((bytesRead = is.read(buffer)) != -1) {
// 입력받은 내용을 파일 내용으로 기록한다.
os.write(buffer, 0, bytesRead);
}
} else {
System.out.println("fail => responseCode : " + responseCode);
}
conn.disconnect();
} catch (Exception e){
e.printStackTrace();
} finally {
try {
if (is != null){
is.close();
}
if (os != null){
os.close();
}
} catch (IOException e){
e.printStackTrace();
}
}
}
728x90
2. FeignClient 이용한 파일 다운로드
- FeignClient 호출시 리턴 타입을 feign에서 제공해주는 Reponse 객체로 받는다.
- Feign.Reponse.Body 객체 안에 있는 asInputStream 메소드를 통해 InputStream 객체를 얻을수 있음.
- 그 이후 파일 다운로드 방법은 위의 HttpURLConnection 사용 시 예제와 유사
@FeignClient(name = "download-api",
url = "https://raw.githubusercontent.com/people92/self-study/main/java-study/src/main/resources/json"
)
public interface DownloadFeignClient {
@GetMapping(value = "/sample.json")
Response downloadJsonFile();
}
@Test
public void downloadJsonFileTest() throws IOException {
String outputDir = "C:/Code/file";
String fileName = "downloadTest" + System.currentTimeMillis() + ".json";
Response response = downloadFeignClient.downloadJsonFile();
Response.Body body = response.body();
InputStream inputStream = body.asInputStream();
if(response.status() == 200) {
FileOutputStream os = new FileOutputStream(outputDir + "/" + fileName);
int bytesRead;
byte[] buffer = new byte[1024];
while ((bytesRead = inputStream.read(buffer)) != -1) {
// 입력받은 내용을 파일 내용으로 기록한다.
os.write(buffer, 0, bytesRead);
}
inputStream.close();
os.close();
}
}
728x90
반응형
'IT > 자바' 카테고리의 다른 글
추상 팩토리 패턴(Abstract Factory Pattern)를 이용한 인터페이스 중복 메소드 제거 (0) | 2023.10.10 |
---|---|
Arrays.asList() 사용시 java.lang.UnsupportedOperationException (0) | 2023.10.05 |
SOLID 원칙 (0) | 2021.02.06 |
피터 코드의 상속 규칙 (0) | 2021.02.06 |
OOP(객체지향프로그램) 4가지 원리 (1) | 2021.02.06 |