httpClient를 통해 파일 흐름 요청(일반 파일 및 압축 파일) 예시
참고 (아래에서 설명한 압축 파일은.gz 형식)
첫째, 서버는 압축되지 않은 일반적인 파일 흐름을 전송한다
서버:
@RequestMapping(value = "/getCommonFile", method = RequestMethod.POST)
public void getFile(HttpServletResponse response) {
BufferedInputStream buffInputStream = null;
OutputStream outputStream = null;
try {
buffInputStream = new BufferedInputStream(new FileInputStream(new File("D:\\testFile\\test.txt")));
outputStream = response.getOutputStream();
byte[] buff = new byte[1024*1024]; // ,
int len = 0;
while((len = buffInputStream.read(buff)) > 0) {
// response ,
outputStream.write(buff, 0, len);
outputStream.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(buffInputStream != null) {
buffInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
클라이언트:
public void getCommonFile() throws IOException {
// ,
CloseableHttpResponse response = HttpSender.toPost(FILE_URL, null);
InputStream inputStream = response.getEntity().getContent();
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
byte[] buff = new byte[1024*1024]; // ,
int len = 0;
while((len = inputStream.read(buff)) > 0) {
// ByteArrayOutputSteam
byteArray.write(buff, 0, len);
byteArray.flush();
}
inputStream.close();
response.close();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new ByteArrayInputStream(byteArray.toByteArray()), "utf-8"));
String line = null;
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
둘째, 서버는 압축된 파일 흐름을 전송한다(직접 읽는 압축 파일)
@RequestMapping(value = "/getZipFile", method = RequestMethod.POST)
public void getZipFile(HttpServletResponse response) {
BufferedInputStream buffInputStream = null;
OutputStream outputStream = null;
try {
buffInputStream = new BufferedInputStream(new FileInputStream(new File("D:\\testFile\\test.gz")));
outputStream = response.getOutputStream();
byte[] buff = new byte[1024*1024]; // ,
int len = 0;
while((len = buffInputStream.read(buff)) > 0) {
// response ,
outputStream.write(buff, 0, len);
outputStream.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(buffInputStream != null) {
buffInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
클라이언트:
public void getZipFile() throws IOException {
// ,
CloseableHttpResponse response = HttpSender.toPost(FILE_URL, null);
InputStream inputStream = response.getEntity().getContent();
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
byte[] buff = new byte[1024*1024]; // ,
int len = 0;
while((len = inputStream.read(buff)) > 0) {
// ByteArrayOutputSteam
byteArray.write(buff, 0, len);
byteArray.flush();
}
inputStream.close();
response.close();
//GZIPInputstream ,
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new GZIPInputStream(
new ByteArrayInputStream(byteArray.toByteArray())), "utf-8"));
String line = null;
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}
셋째, 서버는 압축된 파일 흐름을 전송한다(직접 읽은 일반 파일은 메모리에서 파일 흐름을 압축한다)
@RequestMapping(value = "/getCommontToZipFile", method = RequestMethod.POST)
public void getCommontToZipFile(HttpServletRequest request, HttpServletResponse response) {
BufferedInputStream buffInputStream = null;
OutputStream outputStream = null;
GZIPOutputStream zipOut = null;
try {
outputStream = response.getOutputStream();
buffInputStream = new BufferedInputStream(new FileInputStream(new File("D:\\testFile\\test.txt")));
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//
zipOut = new GZIPOutputStream(byteArrayOutputStream);
byte[] buff = new byte[1024*1024]; // ,
int len = 0;
while((len = buffInputStream.read(buff)) > 0) {
// byteArrayOutputStream
zipOut.write(buff, 0, len);
zipOut.flush();
}
outputStream.write(byteArrayOutputStream.toByteArray());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(buffInputStream != null) {
buffInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(zipOut != null) {
zipOut.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
클라이언트:
두 번째 상황의 클라이언트 코드와 마찬가지로 코드를 붙이지 않는다
넷째, 여러 개의 압축 파일을 직접 읽고 여러 개의 압축 파일을 하나의byteArray에 기록한다
서버:
@RequestMapping(value = "/getMultiZipFile", method = RequestMethod.POST)
public void getMultiZipFile(HttpServletRequest request, HttpServletResponse response) {
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
List files = new ArrayList();
File file = new File("D:\\testFile\\test1.gz");
files.add(file);
file = new File("D:\\testFile\\test2.gz");
files.add(file);
for(File file1 : files) {
readDetailDataToByteArray(byteArray, file1);
}
writeToResponse(byteArray, response);
}
public static void readDetailDataToByteArray(ByteArrayOutputStream byteArray, File file) {
BufferedInputStream bufferedInputStream = null;
try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
byte[] b = new byte[1024*1024];
int j;
while ((j = bufferedInputStream.read(b)) > 0) {
byteArray.write(b, 0, j);
byteArray.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(bufferedInputStream != null) {
bufferedInputStream.close();
}
} catch (Exception e) {
}
}
}
private void writeToResponse(ByteArrayOutputStream byteArray, HttpServletResponse response) {
OutputStream outputStream = null;
ByteArrayInputStream inputStream = null;
response.addHeader(HttpHeaders.CONTENT_TYPE, "utf-8");
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=test.gz" );
GZIPOutputStream zipOut = null;
ByteArrayOutputStream zipOutByteArray = new ByteArrayOutputStream();
try {
outputStream = response.getOutputStream();
zipOut = new GZIPOutputStream(zipOutByteArray);
inputStream = new ByteArrayInputStream(byteArray.toByteArray());
byte[] b = new byte[Integer.parseInt(buffSize)];
int j;
while ((j = inputStream.read(b)) > 0) {
zipOut.write(b, 0, j);
zipOut.flush();
}
// zipOut , ,
zipOut.close();
outputStream.write(zipOutByteArray.toByteArray());
} catch (IOException e1) {
}finally {
try {
if(zipOutByteArray != null) {
zipOutByteArray.close();
}
} catch (Exception e) {
}
try {
if(byteArray != null) {
byteArray.close();
}
} catch (Exception e) {
}
try {
if(inputStream != null) {
inputStream.close();
}
} catch (Exception e) {
}
try {
if(outputStream != null) {
outputStream.close();
}
} catch (Exception e) {
}
}
}
클라이언트:
두 번째 상황의 클라이언트 코드와 마찬가지로 코드를 붙이지 않는다
다음으로 전송:https://www.cnblogs.com/jianyong-long/p/9693061.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.