이 API 작업 메서드는 파일을 검색 하 고 바이트의 배열로 파일을 변환 한 다음 바이트 배열 및 메타 데이터와 FileContentResult를 반환 합니다. 다음 코드 조각에는 예제가 표시됩니다. 가장 일반적인 구현은 읽기/쓰기 작업을 수행할 때 바이트를 버퍼링하는 구현입니다. 이 구현은 전체 파일을 메모리에 로드하지 않으므로 대용량 파일에서도 안전하게 사용할 수 있습니다. 응용 프로그램이 다른 시스템과 통신해야 하는 경우 응용 프로그램이 백 엔드에서 HttpClient를 사용하여 다른 시스템으로 데이터를 보내고 데이터를 수신하는 것이 일반적입니다. Microsoft 문서의 이 문서를 기반으로 HTTP 요청을 보내고 HTTP 응답을 받는 것은 간단합니다. 그러나 대부분의 자습서 및 블로그 게시물은 HttpClient를 사용하여 파일 개체와 키/값 쌍 의 컬렉션으로 FormData를 보내는 것에 대해 별로 이야기하지 않습니다. 이 블로그 게시물은 누락 된 가이드를 제공 하려고합니다. 이것이 오늘의 전부입니다. 이 짧은 블로그 게시물에서는 파일 업로드/다운로드를 위한 서버 측 웹 API 작업 방법 및 여러 부분 양식 데이터를 전송하고 HttpClient를 사용하여 파일을 다운로드하는 클라이언트 측 메서드의 예를 살펴보았습니다. 게시물은 이미 조금 오래되었지만 http 스트림에서 파일 스트림으로의 `CopyToAsync`는 매우 우아합니다! 여기서 일어나는 일은 URLConnection을 특정 범위의 파일 바이트를 요청하도록 구성했다는 것입니다.
범위는 마지막으로 다운로드한 바이트에서 시작하여 원격 파일 크기에 해당하는 바이트로 끝납니다. IO 작업에 매우 많이 사용되는 또 다른 라이브러리는 아파치 커먼스 IO입니다. Javadoc에서 일반 파일 조작 작업에 사용되는 FileUtils라는 유틸리티 클래스가 있음을 알 수 있습니다. URL에서 로컬 파일로 읽은 바이트를 작성하려면 FileOutputStream 클래스의 write() 메서드를 사용합니다. 파일 URL에 대한 GET 요청을 실행하고 파일 콘텐츠를 얻는 데 사용할 수 있습니다. 인터넷 연결이 때때로 실패한다는 점을 고려할 때, 바이트 0에서 파일을 다시 다운로드하는 대신 다운로드를 다시 시작할 수 있게 하는 것이 유용합니다. 이 자습서에서는 파일을 다운로드하는 데 사용할 수 있는 몇 가지 방법을 살펴보겠습니다. 각 HttpResponseBodyPart를 메모리에 누적하는 대신 FileChannel을 사용하여 로컬 파일에 바이트를 직접 작성합니다. getBodyByteBuffer() 메서드를 사용하여 ByteBuffer를 통해 본문 부품 콘텐츠에 액세스합니다. 이제 파일의 총 콘텐츠 크기가 있으므로 파일이 부분적으로 다운로드되었는지 확인할 수 있습니다. 이 경우 디스크에 기록된 마지막 바이트에서 다운로드를 다시 시작합니다: 위의 코드에서 22~47줄은 파일 처리를 처리하고 48~65줄은 양식 처리를 처리합니다. MultipartReaderHTTP 요청 본문에서 섹션을 읽으면 요청 콘텐츠가 구문 분석되어 실제 디스크(파일) 및 메모리(양식 데이터)에 저장됩니다.
URL을 다운로드하여 파일에 저장하는 한 가지 방법은 다음과 같습니다 (Windows 7을 사용하고 있으므로 WindowsRT를 사용할 수 없으므로 System.IO 사용하고 있습니다.) URL에서 파일을 읽으려면 URL 스트림에서 새 ReadableByteChannel을 만듭니다: 위의 예제는 매우 상세하지만 다행히도 Java 7에서는 IO 작업을 처리하기 위한 도우미 메서드가 포함된 Files 클래스가 있습니다.