[질문] java/apache ftp/ascii or binary CopyStreamException이 발생했습니다.
글쓴이: samsee / 작성시간: 화, 2009/06/23 - 11:51오전
안녕하세요 여러분. 오랜만에 kldp에 글을 올리네요 :)
java에서 apache commons의 FTPClient를 사용하여 파일을 업로드하는 코드가 있습니다.
tif파일과 inf파일을 업로드하는데요. 대부분의 경우 문제가 없었는데 특정 파일만 업로드 중간에 CopyStreamException이 발생하더군요. 물론 파일도 다 못 올라갔구요. 전송 부분의 코드는 아래와 같습니다.
// 전송 결과를 반환할 해시 HashMap uploadingResults = new HashMap(sendingFiles.length); // FTP 클라이언트 인스턴스 생성 JakartaFtpWrapper ftp = new JakartaFtpWrapper(); // 접속과 로그인 if (<a href="http://ftp.connectAndLogin" rel="nofollow">ftp.connectAndLogin</a>(host, userName, password)) { boolean uploadResult = false; // 디렉터리 설정 <a href="http://ftp.changeWorkingDirectory" rel="nofollow">ftp.changeWorkingDirectory</a>(remoteWorkingDirectory); for (int i = 0; i < sendingFiles.length; i++) { // 파일 업로드 로컬 파일명과 리모트 파일명은 동일하다고 가정한다. uploadResult = <a href="http://ftp.uploadFile" rel="nofollow">ftp.uploadFile</a>(localWorkingDirectory + sendingFiles[i], sendingFiles[i]); // 전송 결과 설정 uploadingResults.put(sendingFiles[i], new Boolean(uploadResult)); } // 접속 종료 <a href="http://ftp.logout" rel="nofollow">ftp.logout</a>(); <a href="http://ftp.disconnect" rel="nofollow">ftp.disconnect</a>();
뭐가 문제인지 계속 확인하던 중 여러가지 삽질을 해봤습니다. 그러다가 파일 전송 전에 ftp.binary()로 전송모드를 변경하니 바로 되더군요.
문제는 해결했지만 궁금한 점이 있습니다.
- 문제가 발생한 tif 파일의 중간에 EOF가 있어서 에러가 발생한 걸까요?
- FTPClient에서는 업로드를 할 때 기본 BufferedOutputStream을 사용합니다. 그리고 파일타입에 따라 ToNetASCIIOutputStream이라는 걸 사용하기도 하더군요. 이런 특징이 문제가 발생한 tif파일에 적용되지 못한 이유는 무엇일까요?
- 반대로 다운로드할 때는 셸 스크립트를 사용하고 있습니다. 스크립트에서 ftp를 사용하지요. 이 경우에는 문제가 발생하지 않을까요? 셸에서 FTP로 위의 문제가 발생한 파일을 업로드할 때는 정상적으로 올라갔습니다.
그럼 감사합니다 :)
Forums:
댓글 달기