2011-05-24 3 views
1

I my app Я пытаюсь отправить изображение через сервер PHP. Проблема в том, что PHP-программисты говорят, что их следует отправлять как данные. Ниже приведен код, который я использую в настоящее время, пожалуйста, помогите мне преобразовать изображение в данные и получить ответ с сервера.Загрузка изображения на сервер в android

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/siva.PNG"; 
     Log.e("pathToOurFile",""+pathToOurFile); 

     String urlServer = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/upload.php"; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     Log.e("URL Server",""+urlServer); 

     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1*1024*1024; 
     Log.e("maxBufferSize",""+maxBufferSize); 

     try 
     { 
      FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile)); 
      Log.e("FIS",""+fileInputStream); 
      URL url = new URL(urlServer); 
      connection = (HttpURLConnection) url.openConnection(); 

    // Allow Inputs & 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) 
      Log.e("con",String.valueOf(connection.getDoOutput())); 

      serverResponseCode = connection.getResponseCode(); 
      serverResponseMessage = connection.getResponseMessage(); 
      Log.e("response",""+serverResponseCode); 
      Log.e("serverResponseMessage",""+serverResponseMessage); 

      fileInputStream.close(); 
      outputStream.flush(); 
      outputStream.close(); 
     } 
     catch (Exception ex) 
     { 
      Log.e("Exception Handling",""+ex); 
     } 
     } 

ответ

0

Atlast я нашел ответ, я сделал небольшую ошибку .... В приведенном выше коде я изменил только одно слово в следующей строке

outputStream.writeBytes ("Content-Disposition: форма -data; name = \ "uploadedfile \"; filename = \ "" + pathToOurFile + "\" "+ lineEnd);

В приведенной выше строке основной частью является слово «загруженный файл». Это слово должно быть указано программистом php, иначе файл, который мы отправляем, не будет заменен.

См. here

Смежные вопросы