Hi all,
I searched this topic and found a couple of posts but I couldn't find what I am looking for. Here's the problem - I am trying to send an image to a client (browser in this case) over a socket. After the image is received I am trying to display it in the browser but it looks corrupted, as if some of the data is missing. The weird thing is that I am able to send some images and display them without any problems. I probably should mention that I am resizing the images, but that's done in HTML so I don't think it's the problem here. Here's what I've tried so far:
1. Send different image type, e.g. png, gif - worked;
2. Save the jpg file as a png and send it over - worked;
3. Write a simple program that copies a jpg image from one location to another - worked;
4. Send the image in actual size to the client - worked.
(by 'worked' I mean that I can see it in the browser)
Here's how I send the data to the client:
BufferedOutputStream out = new BufferedOutputStream( socket.getOutputStream() );
// f is the file to be sent to the client.
BufferedInputStream reader = new BufferedInputStream( new FileInputStream( f ) );
// send OK headers and content length using f.length()
byte[] buffer = new byte[ 4096 ];
int bytesRead;
while ( (bytesRead = reader.read(buffer)) != -1 ) {
out.write( buffer, 0, bytesRead );
}
reader.close();
out.flush();
out.close();
and here's the sample program for file transfer program I wrote:
package main;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataSendTester {
public static void main( String[] args ) {
File testF = new File( "test.jpg" );
File result = new File( "TEST/testImg.jpg" );
try {
System.out.println( "Writing..." );
BufferedInputStream in = new BufferedInputStream( new FileInputStream( testF ) );
BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream( result ) );
byte[] buffer = new byte[ 4096 ];
int bytesRead;
while ( (bytesRead = in.read( buffer )) != -1 ) {
out.write( buffer, 0, bytesRead );
}
out.flush();
out.close();
System.out.println( "Done." );
} catch ( FileNotFoundException e ) {
e.printStackTrace();
} catch ( IOException e ) {
e.printStackTrace();
}
}
}
Any ideas? Thanks!