我正在開發一個Android應用程序,我試圖從客戶端將圖像上傳到我們的服務器。當我進入服務器查看圖像時,它有時會損壞(底部灰色條)。我不知道爲什麼會發生這種情況。任何人都可以幫我解決這個問題,或者指導我如何做到這一點?以下是上傳圖片的代碼:Android開發圖像上傳損壞
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();
}
}