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