проблема при загрузке изображения на php-сервер с Android

#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 /.