Q.CAST QSP API 호출 파일 다운로드 수정
This commit is contained in:
parent
ffc6be8752
commit
1275b8a8c0
@ -4,6 +4,8 @@ import java.io.ByteArrayInputStream;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
@ -146,16 +148,21 @@ public class BoardService {
|
|||||||
String url = QSP_API_URL + "/api/file/downloadFile" + "?encodeFileNo=" + encodeFileNo;
|
String url = QSP_API_URL + "/api/file/downloadFile" + "?encodeFileNo=" + encodeFileNo;
|
||||||
|
|
||||||
/* [2]. QSP API CALL -> Response */
|
/* [2]. QSP API CALL -> Response */
|
||||||
String strResponse = interfaceQsp.callApi(HttpMethod.GET, url, null);
|
Map<String, String> result = new HashMap<String, String>();
|
||||||
|
byte[] byteResponse = interfaceQsp.callApi(HttpMethod.GET, url, null, result);
|
||||||
|
|
||||||
if (!"".equals(strResponse)) {
|
if (byteResponse != null && byteResponse.length > 0) {
|
||||||
try {
|
try {
|
||||||
/* [3]. API 응답 파일 처리 */
|
/* [3]. API 응답 파일 처리 */
|
||||||
response.setContentType("application/octet-stream");
|
response.setContentType(
|
||||||
response.setHeader("Content-Disposition", "attachment;");
|
!"".equals(result.get("type")) && result.get("type") != null ? result.get("type")
|
||||||
|
: "application/octet-stream");
|
||||||
|
response.setHeader("Content-Disposition",
|
||||||
|
!"".equals(result.get("disposition")) && result.get("disposition") != null
|
||||||
|
? result.get("disposition")
|
||||||
|
: "attachment;");
|
||||||
|
|
||||||
InputStream inputStream =
|
InputStream inputStream = new ByteArrayInputStream(byteResponse);
|
||||||
new ByteArrayInputStream(strResponse.getBytes(StandardCharsets.UTF_8));
|
|
||||||
StreamUtils.copy(inputStream, response.getOutputStream());
|
StreamUtils.copy(inputStream, response.getOutputStream());
|
||||||
|
|
||||||
response.flushBuffer();
|
response.flushBuffer();
|
||||||
@ -169,8 +176,7 @@ public class BoardService {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
// [msg] File does not exist.
|
// [msg] File does not exist.
|
||||||
throw new QcastException(ErrorCode.NOT_FOUND,
|
throw new QcastException(null, message.getMessage("common.message.file.download.exists"));
|
||||||
message.getMessage("common.message.file.download.exists"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
package com.interplug.qcast.util;
|
package com.interplug.qcast.util;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Map;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
@ -79,4 +82,75 @@ public class InterfaceQsp {
|
|||||||
|
|
||||||
return sb != null ? sb.toString() : null;
|
return sb != null ? sb.toString() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API Call - byte return, file down 사용
|
||||||
|
*
|
||||||
|
* @param apiPath
|
||||||
|
* @param requestObject
|
||||||
|
* @return String
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public byte[] callApi(HttpMethod httpMethod, String apiPath, Object requestObject,
|
||||||
|
Map<String, String> result) throws Exception {
|
||||||
|
|
||||||
|
URL url = null;
|
||||||
|
HttpURLConnection con = null;
|
||||||
|
OutputStreamWriter osw = null;
|
||||||
|
BufferedReader br = null;
|
||||||
|
|
||||||
|
byte[] bt = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
url = new URL(apiPath);
|
||||||
|
con = (HttpURLConnection) url.openConnection();
|
||||||
|
con.setConnectTimeout(30000); // 서버에 연결되는 Timeout 시간 설정
|
||||||
|
con.setReadTimeout(30000); // InputStream 읽어 오는 Timeout 시간 설정
|
||||||
|
con.setRequestMethod(httpMethod.toString());
|
||||||
|
con.setRequestProperty("Content-Type", "application/json");
|
||||||
|
con.setDoInput(true);
|
||||||
|
con.setUseCaches(false);
|
||||||
|
con.setDefaultUseCaches(false);
|
||||||
|
|
||||||
|
if (HttpMethod.GET.equals(httpMethod)) {
|
||||||
|
con.setDoOutput(false);
|
||||||
|
} else {
|
||||||
|
con.setDoOutput(true); // POST 데이터를 OutputStream으로 넘겨 주겠다는 설정
|
||||||
|
if (requestObject != null) {
|
||||||
|
ObjectMapper om = new ObjectMapper();
|
||||||
|
osw = new OutputStreamWriter(con.getOutputStream());
|
||||||
|
osw.write(om.writeValueAsString(requestObject)); // json 형식의 message 전달
|
||||||
|
osw.flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
|
||||||
|
// response 헤더 값 결과 셋팅
|
||||||
|
result.put("type", con.getHeaderField("Content-Type"));
|
||||||
|
result.put("disposition", con.getHeaderField("Content-Disposition"));
|
||||||
|
|
||||||
|
InputStream inputStream = con.getInputStream();
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
|
||||||
|
byte[] buffer = new byte[4096];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||||
|
outputStream.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
bt = outputStream.toByteArray(); // 파일 데이터 반환
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw e;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (osw != null)
|
||||||
|
osw.close();
|
||||||
|
if (br != null)
|
||||||
|
br.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bt != null ? bt : null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user