You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by David Griffiths <dg...@boats.com> on 2005/11/09 03:25:13 UTC

Another corrupt image issue...

I'm new to the commons-net library, but I've read through the FAQ and 
the APIs. I've also googled my problem.

I'm downloading images from a site using the commons-HttpClient, 
resizing them, and then ftp'ing them up to an image server, but the 
images appear to be corrupt (can't view them in a browser on the server 
they've been uploaded to, ditto if I scp them down).

I am setting the file-transfer-type to binary when I create the connection:

                
ftpConnections[iServerCount].setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
                ftpConnections[iServerCount].completePendingCommand();

I've tried various things to fix this.

Attempt #1:

Handing a stream over to the FTPClient to upload the image
FileInputStream fInputStream = null;

    fInputStream = new FileInputStream(f);
    ftpConnections[iServerCount].changeWorkingDirectory(strRemoteDirectory);
    ftpConnections[iServerCount].setFileTransferMode(FTP.BINARY_FILE_TYPE);
    ftpConnections[iServerCount].completePendingCommand();
    if ( ftpConnections[iServerCount].storeFile(f.getName(), 
fInputStream) ) bOneSucceeded = true;

Attempt #2

Using two streams to upload the image

    fInputStream = new FileInputStream(f);
    ftpConnections[iServerCount].changeWorkingDirectory(strRemoteDirectory);
    ftpConnections[iServerCount].setFileTransferMode(FTP.BINARY_FILE_TYPE);
    ftpConnections[iServerCount].completePendingCommand();

    OutputStream os = 
ftpConnections[iServerCount].storeFileStream(f.getName());
    byte[] bData = new byte[2048];
    while(true)
    {
        int iBytesRead = fInputStream.read(bData);
        if (iBytesRead == -1) break;
        os.write(bData, 0, iBytesRead);
    }
    os.flush();
    os.close();
    fInputStream.close();
    ftpConnections[iServerCount].completePendingCommand();

I get a successful status back in both cases.

I've checked that the images I am downloading are fine and processing 
are fine (the images I am ftp'ing up are fine). I've also tried using a 
DataInputStream instead of a FileInputStream.

I've also tried using the FTP.IMAGE_FILE_TYPE to see if that would make 
a difference.

Any insight would be appreciated.

David

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Re: Another corrupt image issue...

Posted by David Griffiths <dg...@boats.com>.
I solved the issue by going through the source code. I noticed that the 
libraries were sending a "MODE" command ot the server, and if you notice 
below, I wasn't checking the return type of the changeWorkingDirectory 
call - it was failing because setting the MODE to binary is not correct.

I should have been calling setFileType.

David.

David Griffiths wrote:

> I'm new to the commons-net library, but I've read through the FAQ and 
> the APIs. I've also googled my problem.
>
> I'm downloading images from a site using the commons-HttpClient, 
> resizing them, and then ftp'ing them up to an image server, but the 
> images appear to be corrupt (can't view them in a browser on the 
> server they've been uploaded to, ditto if I scp them down).
>
> I am setting the file-transfer-type to binary when I create the 
> connection:
>
>                
> ftpConnections[iServerCount].setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 
>
>                ftpConnections[iServerCount].completePendingCommand();
>
> I've tried various things to fix this.
>
> Attempt #1:
>
> Handing a stream over to the FTPClient to upload the image
> FileInputStream fInputStream = null;
>
>    fInputStream = new FileInputStream(f);
>    
> ftpConnections[iServerCount].changeWorkingDirectory(strRemoteDirectory);
>    
> ftpConnections[iServerCount].setFileTransferMode(FTP.BINARY_FILE_TYPE);
>    ftpConnections[iServerCount].completePendingCommand();
>    if ( ftpConnections[iServerCount].storeFile(f.getName(), 
> fInputStream) ) bOneSucceeded = true;
>
> Attempt #2
>
> Using two streams to upload the image
>
>    fInputStream = new FileInputStream(f);
>    
> ftpConnections[iServerCount].changeWorkingDirectory(strRemoteDirectory);
>    
> ftpConnections[iServerCount].setFileTransferMode(FTP.BINARY_FILE_TYPE);
>    ftpConnections[iServerCount].completePendingCommand();
>
>    OutputStream os = 
> ftpConnections[iServerCount].storeFileStream(f.getName());
>    byte[] bData = new byte[2048];
>    while(true)
>    {
>        int iBytesRead = fInputStream.read(bData);
>        if (iBytesRead == -1) break;
>        os.write(bData, 0, iBytesRead);
>    }
>    os.flush();
>    os.close();
>    fInputStream.close();
>    ftpConnections[iServerCount].completePendingCommand();
>
> I get a successful status back in both cases.
>
> I've checked that the images I am downloading are fine and processing 
> are fine (the images I am ftp'ing up are fine). I've also tried using 
> a DataInputStream instead of a FileInputStream.
>
> I've also tried using the FTP.IMAGE_FILE_TYPE to see if that would 
> make a difference.
>
> Any insight would be appreciated.
>
> David
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org