#android
#Android
Вопрос:
всем привет, я пытаюсь загрузить файл изображения с sdcard на php-сервер в Android. я использую следующий код для загрузки, он не показывает исключение, но изображение не загружено на сервер. я не знаю, в чем проблема. пожалуйста, помогите мне. я прикрепил свой код и информацию Logcat. код:
public class UploadImage extends Activity {
InputStream is;
private int serverResponseCode;
private String serverResponseMessage;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
DataInputStream inputStream = null;
String pathToOurFile = "//sdcard//chsevtoneta.png";
String urlServer = "http://xxxxxxxxxxxxxxxxxxxxxxxx/upload.php";
String lineEnd = "rn";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1*1024*1024;
try
{
FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile) );
URL url = new URL(urlServer);
connection = (HttpURLConnection) url.openConnection();
// Allow Inputs amp; Outputs
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
// Enable POST method
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" boundary);
outputStream = new DataOutputStream( connection.getOutputStream() );
outputStream.writeBytes(twoHyphens boundary lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name="uploadedfile";filename="" pathToOurFile """ lineEnd);
outputStream.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// Read file
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(lineEnd);
outputStream.writeBytes(twoHyphens boundary twoHyphens lineEnd);
// Responses from the server (code and message)
serverResponseCode = connection.getResponseCode();
serverResponseMessage = connection.getResponseMessage();
Log.e("response","" serverResponseCode);
Log.e("serverResponseMessage","" serverResponseMessage);
fileInputStream.close();
outputStream.flush();
outputStream.close();
}
catch (Exception ex)
{
//Exception handling
}
}
}
и информация Logcat:
05-10 11:04:59.762: ERROR/response(2203): 200
05-10 11:04:59.762: ERROR/serverResponseMessage(2203): OK
Комментарии:
1. Ваш сервер возвращает сообщение об успешном завершении: как выглядит ваш PHP-код?
2. спасибо, но серверная кодировка для меня недоступна. но для других сервер возвращает правильный ответ [сервер возвращает URL]. любой способ получить ответ?
3. Да, тогда это будет сложно отладить: у вас есть еще чей-нибудь рабочий код?
4. извините за задержку, проблема возникает только в Android, но сервер выдает корректный ответ на iphone. вот почему я не смог прикрепить «чужую» кодировку для iphone.
Ответ №1:
Удаленные серверы отвечают сообщением об успешном завершении (200). Я думаю, что ошибка может быть на стороне сервера, но вы не предоставляете никакого кода для этой части.
Комментарии:
1. спасибо, но серверная кодировка для меня недоступна. но для других сервер возвращает правильный ответ [сервер возвращает URL]. любой способ получить ответ?
Ответ №2:
Глядя на ваш исходный код, кажется, что вы создаете загрузку из нескольких частей / форм вручную: это может легко привести к ошибкам, добавление разрыва строки или дополнительного пробела в неправильном месте было бы очень сложно определить на глаз, но могло бы легко запутать сервер (в зависимости от строгости используемого анализатора HTTP).
Я бы рекомендовал использовать для этого встроенные в Android HTTP-компоненты: пример находится по адресуhttp://indiwiz.com/2009/02/11/multi-part-content-upload-in-apache-http-components-http-client /.