title: How can I fix my android photo upload to send larger streams of data
body: <p>I have an android app that is attempting to upload photos to a web server via API interface. The method works fine as long as the image sizes are not too big (fails somewhere around 1280x800) Heres the code that will work will smaller images but fails with larger ones. Any suggestions?</p>
  
  <pre><code>public void uploadPhoto(FileInputStream fileInputStream, String session_key) throws IOException, ClientProtocolException {
  
      URL connectURL = new URL(API_ENDPOINT_URL + "session_key="
              + session_key + "&amp;method=" + ApiMethods.UPLOAD_PHOTO);
      String lineEnd = "\r\n";
      String twoHyphens = "--";
      String boundary = "*****";
  
      HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();
  
      // Allow Inputs
      conn.setDoInput(true);
  
      // Allow Outputs
      conn.setDoOutput(true);
  
      // Don't use a cached copy.
      conn.setUseCaches(false);
  
      // Use a post method.
      conn.setRequestMethod("POST");
  
      conn.setRequestProperty("Connection", "Keep-Alive");
  
      conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+ boundary);
  
      DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
  
      dos.writeBytes(twoHyphens + boundary + lineEnd);
      // Log.d(TAG, "  dos1: " + dos);
      dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""+ "file.png" + "\"" + lineEnd);
      // Log.d(TAG, "  dos2: " + dos);
      dos.writeBytes(lineEnd);
      // Log.d(TAG, "  dos3: " + dos);
  
      // create a buffer of maximum size
  
      int bytesAvailable = fileInputStream.available();
      int maxBufferSize = 1024;
      int bufferSize = Math.min(bytesAvailable, maxBufferSize);
      byte[] buffer = new byte[bufferSize];
  
      // read file and write it into form...
  
      int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
      Log.d(TAG, " BytesREad:" + bytesRead);
      while (bytesRead &gt; 0) {
          Log.d(TAG, " BytesREad in while:" + bytesRead);
          dos.write(buffer, 0, bufferSize);
          // Log.d(TAG, "  dos3: " + dos);
          bytesAvailable = fileInputStream.available();
          bufferSize = Math.min(bytesAvailable, maxBufferSize);
          bytesRead = fileInputStream.read(buffer, 0, bufferSize);
          /*
           * dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary +
           * twoHyphens + lineEnd);
           */
      }
  
      // send multipart form data necesssary after file data...
  
      // dos.write(data);
      dos.writeBytes(lineEnd);
      dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
      // Log.d(TAG, "  dos4 tostring: " + dos.toString());
  
      // close streams
      // Log.e(Tag,"File is written");
      // fileInputStream.close();
      dos.flush();
      // Log.d(TAG, "  dos5: " + dos.toString());
      InputStream is = conn.getInputStream();
      // retrieve the response from server
      int ch;
  
      StringBuffer b = new StringBuffer();
      while ((ch = is.read()) != -1) {
          b.append((char) ch);
          // Log.d(TAG, "  b: " + b.toString());
      }
      String s = b.toString();
      Log.i("Response", s);
      // Log.d(TAG, "   response:" + s);
      dos.close();
  
  }
  </code></pre>
  
  <p>The errors include</p>
  
  <p>10-20 04:16:26.658: ERROR/dalvikvm-heap(20213): 8957952-byte external allocation too large for this process.
  10-20 04:16:26.658: ERROR/dalvikvm(20213): Out of memory: Heap Size=4551KB, Allocated=3039KB, Bitmap Size=9496KB
  10-20 04:16:26.658: ERROR/(20213): VM won't let us allocate 8957952 bytes</p>