I'm developing an Android application and I'm trying to upload an image to our server from the client side. When I get onto the server to view the image it is corrupted (gray bar on bottom) sometimes. I'm not sure why this is happening. Can anyone help me resolve this issue or point me to a guide on how to do this? Below is the code that uploads the image:
try {
url = new URL(SERVER_URL);
connection = (HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "image/jpeg");
connection.setChunkedStreamingMode(STREAM_CHUNK_SIZE_KB * 1024);
connection.connect();
outputStream = new DataOutputStream(connection.getOutputStream());
// Write file header (userId; Id; contentId; MediaType; size)
outputStream.writeLong(mUserId);
outputStream.writeLong(mId);
outputStream.writeLong(file.getId());
outputStream.writeUTF(MediaType.getMediaType(file.getMediaType()));
outputStream.writeInt(file.getSize());
// Write file data to stream
int maxBufferSize = (8 * 1024);
FileInputStream fileInputStream = new FileInputStream(file.getImageFile());
int bytesAvailable = fileInputStream.available();
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
outputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes("\r\n");
outputStream.flush();
// Check response
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
uploadStatus = true;
InputStream responseStream = connection.getInputStream();
BufferedReader responseReader = new BufferedReader(new
InputStreamReader(responseStream));
char[] response = new char[4];
responseReader.read(response, 0, 4);
responseReader.close();
int responseValue = 0;
for (int b = 0; b < 4; b++) {
responseValue |= response[b] & 0xFF;
if (b < 3) {
responseValue <<= 8;
}
}
switch (responseValue) {
case SAVED_SUCCESSFULLY:
Log.d("FileUploader::upload -> Server response: Upload successful");
break;
case ERROR_SAVING_FILE:
Log.d("FileUploader::upload -> Server response: Upload failed");
break;
case FILE_MORE_THAN_ALLOWED_SIZE:
Log.d("FileUploader::upload -> Server response: Upload failed, exceeded
allowed file size");
break;
}
}
else {
Log.d("FileUploader::upload -> responseCode = " + responseCode);
checkErrorStream(connection.getErrorStream());
}
}
catch(Exception e) {
Log.e(Log.getStackTraceString(e));
}
finally {
try {
if (outputStream != null) {
outputStream.close();
}
}
catch(Exception e) {
Log.e(Log.getStackTraceString(e));
}
if (connection != null) {
connection.disconnect();
}
}