2009-11-27 2 views
1

JakartaFtpWrapper를 사용하여 클라이언트 Java 응용 프로그램에서 내 서버로 파일을 업로드했습니다 (백업용).JakartaFtpWrapper를 사용하여 Java 업로드 jpg - 파일을 읽을 수 없도록 만듭니다.

업로드 된 파일은 텍스트 파일, png 파일 및 jpg입니다.

로컬 컴퓨터에서 유효한 jpg 파일 (서버에 FTPd가 있던 곳)에서 어떻게 든 읽을 수 없게됩니다 (손상된 파일). 이미지 파일 크기가 원본 파일 크기와 비슷하지만 결함이 있습니다. 는 FTP 코드는 정직

public static void writeJpeg(BufferedImage bfImg, String fileName, float quality) throws IOException{ 
FileImageOutputStream output = null; 
try{ 
    Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); 
    ImageWriter writer = (ImageWriter)iter.next(); 
    ImageWriteParam iwp = writer.getDefaultWriteParam(); 
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    iwp.setCompressionQuality(quality); // an integer between 0 and 1  
    File file = new File(fileName); 
    output = new FileImageOutputStream(file); 
    writer.setOutput(output); 
    IIOImage image = new IIOImage(bfImg, null, null); 
    writer.write(null, image, iwp); 
} 
finally{ 
    if (output != null){ 
     output.close(); 
    } 
} 

: 여기

내가 로컬 디스크에 JPG를 작성하는 사용하고 코드의

JakartaFtpWrapper ftpClient = new JakartaFtpWrapper(); 
ftpClient.connectAndLogin(FTP_URL, FTP_USER, FTP_PASSWORD); 
ftpClient.setPassiveMode(true); 

File[] imageFiles = folder.listFiles() 


    for (int j=0; j<imageFiles.length; j++){ 
     File imageFile = imageFiles[j]; 
     if (imageFile != null && imageFile.isFile() && (FileUtils.getFileSuffix(imageFile).equals("jpg") || FileUtils.getFileSuffix(imageFile).equals("png"))){ // upload only image files 
      ftpClient.uploadFile(imageFile.getAbsolutePath(), imageFile.getName()); 
     } 
    } 

감사합니다, 는

+0

왜 업로드 된 이미지를 처리하기 위해 Java 2D API를 사용하고 있는지 물어볼 수 있습니까? 디스크에 저장하기 전에 업로드 된 이미지를 수정 하시겠습니까? 이 코드는 이미지에 흥미로운 것을하지 않습니다. 이미지를 올리면 보통 'InputStream'의 맛을보아야합니다. 일반적으로'FileOutputStream'과 같이'OutputStream'에 직접 쓸 수 있습니다. 이를 위해서는 Java 2D가 필요하지 않습니다. – BalusC

+0

코드가 배치 된 방식도 나에게 혼란 스러웠다 : 맨 위 섹션은 파일이 어떻게 인코딩되는지 보여주고 (우리는 실제로 신경 쓰지 않는다), 아래 부분은 업로드 방법을 보여준다. –

+0

맞습니다. 관련이 없습니다. 그러나이 질문을 게시 할 때 jpeg가 인코딩되는 방식이 관련되어있을 수 있다는 의구심이있었습니다. – Ranch

답변

1

무엇이야 란 서버에서 실행 중입니까? 그것은 "밖으로 상자"FTP 서버 또는 당신이 쓴 무엇입니까?

이미지는 바이너리 데이터입니다. JakartaFtpWrapper가 FTP 전송을 바이너리 모드로 전환 할 수있는 옵션을 제공한다면 그렇게해야합니다. 귀하의 문제의 가장 큰 원인은 텍스트 모드에서 전송을 처리하는 나쁜 기본 시도라고 생각합니다. 작은 이미지를 나란히 비교하는 경우 0x0a 옆에 캐리지 리턴 ((char) 0x0d == (char) 13)이 추가되거나 제거되어야합니다. 그렇다면 문제가됩니다.

+0

감사합니다. JakartaFtpWrapper에서 .binary() 메서드를 사용해야합니다. 16 진수 편집기를 사용하여 jpg 파일을 구하기 위해 관리해 봤지만 그건 생명의 은인이었습니다! – Ranch

+0

우수, 다행스럽게 도울 수있었습니다! 내 대답을 upvoting하고 그것을 받아들이면서 나를 부자와 유명하게 도와주세요! –

관련 문제