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에 따라 라이센스가 부여됩니다.