[질문] java/apache ftp/ascii or binary CopyStreamException이 발생했습니다.

samsee의 이미지

안녕하세요 여러분. 오랜만에 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로 위의 문제가 발생한 파일을 업로드할 때는 정상적으로 올라갔습니다.

그럼 감사합니다 :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.