title: Store image to Blobstore from android client and retrieve blobkey and upload url to store in Datastore. - GAE
body: <p>In my Android application, I want to upload image to the Blobstore, then  retrieve an Upload url and the image's Blobkey, so I can store the Blobkey in the DataStore. </p>
  
  <p>I've tried this code, but my image isn't uploading:</p>
  
  <p>Servlet (Return upload url)</p>
  
  <pre><code>BlobstoreService blobstoreService = BlobstoreServiceFactory
              .getBlobstoreService();
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
              throws IOException {
  
          UploadOptions uploadOptions = UploadOptions.Builder
                  .withGoogleStorageBucketName("photobucket11")
                  .maxUploadSizeBytes(1048576);
          String blobUploadUrl = blobstoreService.createUploadUrl("/upload",
                  uploadOptions);
  
          // String blobUploadUrl = blobstoreService.createUploadUrl("/uploaded");
  
          resp.setStatus(HttpServletResponse.SC_OK);
          resp.setContentType("text/plain");
  
          PrintWriter out = resp.getWriter();
          out.print(blobUploadUrl);
  
      }
  
      public void doPost(HttpServletRequest req, HttpServletResponse resp)
              throws IOException {
          doGet(req, resp);
      }
  </code></pre>
  
  <p>Code : Android client</p>
  
  <pre><code>Bitmap bmp = BitmapFactory.decodeFile(imagePath);
                  ByteArrayOutputStream out = new ByteArrayOutputStream();
                  bmp.compress(CompressFormat.JPEG, 75, out);
                  byte[] imgByte = out.toByteArray();
                  String encodedImage = Base64.encodeToString(imgByte,
                          Base64.DEFAULT);
  
                  HttpClient httpClient = new DefaultHttpClient();                    
                  HttpGet httpGet = new HttpGet(
                          "app-url/ImgUpload");
                  HttpResponse response = httpClient.execute(httpGet);
                  HttpEntity urlEntity = response.getEntity();
                  InputStream in = urlEntity.getContent();
                  String str = "";
                  while (true) {
                      int ch = in.read();
                      if (ch == -1)
                          break;
                      str += (char) ch;
                  }
  </code></pre>
  
  <p>This will return upload url in form of <code>/_ah/upload/akjdhjahdjaudshgaajsdhjsdh</code> which I can use to store the image. </p>
  
  <p>This code uses the url to store the image:</p>
  
  <pre><code>httpClient = new DefaultHttpClient();
                  HttpPost postRequest = new HttpPost(str);
                  ByteArrayBody bab = new ByteArrayBody(imgByte, "forest.jpg");
  
                  MultipartEntity reqEntity = new MultipartEntity(
                          HttpMultipartMode.BROWSER_COMPATIBLE);
  
                  reqEntity.addPart("uploaded", bab);
                  reqEntity.addPart("photoCaption", new StringBody("sfsdfsdf"));
                  postRequest.setEntity(reqEntity);
                  response = httpClient.execute(postRequest);
  
                  BufferedReader reader = new BufferedReader(
                          new InputStreamReader(
                                  response.getEntity().getContent(), "UTF-8"));
                  String sResponse;
                  StringBuilder s = new StringBuilder();
  
                  while ((sResponse = reader.readLine()) != null) {
                      s = s.append(sResponse);
                  }
  </code></pre>
  
  <p>Here, if I check value of the String <code>s</code>, it shows <code>null</code>. That means it is returning a null response. I don't know what the problem is with this code. Please guide me to solve this problem.</p>