title: Android Upload image on server , image is broken
body: <p>i'm using a method "uploadAvatar" to upload an image on my ubuntu server with android 4.1 and php with nginx and php-fpm 5.3. The photo is picked or take from camera and then is cropped , saved in a folder and then uploaded to the server.</p>
  
  <p>I can see the image in the phone at the right path, with the gallery application. I call the method with the absolute path of the image and then the application start to upload the image, the server respond 200, the image is on the server but is broken, i'm unable to read the image with a browser.</p>
  
  <pre><code>public int uploadAvatar(String sourceFileUri) {
  
  
      String fileName = sourceFileUri;
  
      HttpURLConnection conn = null;
      DataOutputStream dos = null;
      String lineEnd = "\r\n";
      String twoHyphens = "--";
      String boundary = "*****";
      int bytesRead, bytesAvailable, bufferSize;
      byte[] buffer;
      int maxBufferSize = 1 * 1024 * 1024;
      File sourceFile = new File(sourceFileUri);
  
      if (!sourceFile.isFile()) {
  
          ProgressDialog_.dismiss();
  
          Log.e("uploadFile", "Source File not exist :" + sourceFile.getAbsolutePath());
  
          runOnUiThread(new Runnable() {
              public void run() {
                  //messageText.setText("Source File not exist :"+uploadFilePath + "" + uploadFileName);
              }
          });
  
          return 0;
  
      }
      else
      {
          try {
  
              // open a URL connection to the Servlet
              FileInputStream fileInputStream = new FileInputStream(sourceFile);
              URL url = new URL(upLoadServerUri);
  
              // Open a HTTP  connection to  the URL
              conn = (HttpURLConnection) url.openConnection();
              conn.setDoInput(true); // Allow Inputs
              conn.setDoOutput(true); // Allow Outputs
              conn.setUseCaches(false); // Don't use a Cached Copy
              conn.setRequestMethod("POST");
              conn.setRequestProperty("Connection", "Keep-Alive");
              conn.setRequestProperty("ENCTYPE", "multipart/form-data");
              conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
              conn.setRequestProperty("uploaded_file", fileName);
  
              dos = new DataOutputStream(conn.getOutputStream());
  
              dos.writeBytes(twoHyphens + boundary + lineEnd);
              dos.writeBytes("Content-Disposition: form-data; name=uploaded_file;filename=" + fileName + " + lineEnd");
  
              dos.writeBytes(lineEnd);
  
              // create a buffer of  maximum size
              bytesAvailable = fileInputStream.available();
  
              bufferSize = Math.min(bytesAvailable, maxBufferSize);
              buffer = new byte[bufferSize];
  
              // read file and write it into form...
              bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  
              while (bytesRead &gt; 0) {
  
                  dos.write(buffer, 0, bufferSize);
                  bytesAvailable = fileInputStream.available();
                  bufferSize = Math.min(bytesAvailable, maxBufferSize);
                  bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  
              }
  
              // send multipart form data necesssary after file data...
              dos.writeBytes(lineEnd);
              dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
  
              // Responses from the server (code and message)
              serverResponseCode = conn.getResponseCode();
              String serverResponseMessage = conn.getResponseMessage();
  
              Log.i("uploadFile", "HTTP Response is : "
                      + serverResponseMessage + ": " + serverResponseCode);
  
              if(serverResponseCode == 200){
  
                  runOnUiThread(new Runnable() {
                      public void run() {
  
                          /*
                          String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                  +" http://www.androidexample.com/media/uploads/"
                                  +uploadFileName;
  
                          //messageText.setText(msg);
                          */
  
                          Toast.makeText(Register_avatar.this, "File Upload Complete.",
                                  Toast.LENGTH_SHORT).show();
                      }
                  });
              }
  
              //close the streams //
              fileInputStream.close();
              dos.flush();
              dos.close();
  
          } catch (MalformedURLException ex) {
  
              ProgressDialog_.dismiss();
              ex.printStackTrace();
  
              runOnUiThread(new Runnable() {
                  public void run() {
                      //messageText.setText("MalformedURLException Exception : check script url.");
                      Toast.makeText(Register_avatar.this, "MalformedURLException",
                              Toast.LENGTH_SHORT).show();
                  }
              });
  
              Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
          } catch (Exception e) {
  
              ProgressDialog_.dismiss();
              e.printStackTrace();
  
              runOnUiThread(new Runnable() {
                  public void run() {
                      //messageText.setText("Got Exception : see logcat ");
                      Toast.makeText(Register_avatar.this, "Got Exception : see logcat ",
                              Toast.LENGTH_SHORT).show();
                  }
              });
              Log.e("Upload file to server Exception", "Exception : "
                      + e.getMessage(), e);
          }
          ProgressDialog_.dismiss();
          return serverResponseCode;
  
      } // End else block
  }
  </code></pre>
  
  <p>and this is the server side PHP script:</p>
  
    
  
  <p>The image is uploaded but is broken, on the device is ok ...
  It's about 2 days i'm working on this issue , somebody can help me ?</p>
  
  <p>you can see the broken image here: <a href="http://putp.about42.com/testimage.png" rel="nofollow">http://putp.about42.com/testimage.png</a></p>
  
  <p>UPDATE:</p>
  
  <p>to build this method i follow the tutorial from <a href="http://androidexample.com/Upload_File_To_Server_-_Android_Example/index.php?view=article_discription&amp;aid=83&amp;aaid=106" rel="nofollow">here</a> :</p>
  
  <p>i found an error in the line :</p>
  
  <pre><code>dos.writeBytes("Content-Disposition: form-data; name="uploaded_file";filename=""
                                           + fileName + """ + lineEnd);
  </code></pre>
  
  <p>and i changed with this :</p>
  
  <pre><code>dos.writeBytes("Content-Disposition: form-data; name=uploaded_file;filename=" + fileName + " + lineEnd");
  </code></pre>
  
  <p>Maybe the broken image depend on this ... i'm sorry but i don't know what this line of code do ... </p>
  
  <p>Thanks</p>