Question

First, I'm french, so excuse my english.. I've traveled stackoverflow to find my answer, but without success.. I'm beginner in Android and Java Language.

I would like to upload photo from my android app to Blobstore. I read these article and success them:

But I've no idea how write code in my android app to upload photo to blobstore...

Here is my code:

Serve.java

public class Serve extends HttpServlet {
    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws IOException {
            BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
            blobstoreService.serve(blobKey, res);
        }
}

Upload.java

public class Upload extends HttpServlet {
    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {

        Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
        BlobKey blobKey = blobs.get("myFile");

        if (blobKey == null) {
            res.sendRedirect("/");
        } else {
            res.sendRedirect("/serve?blob-key=" + blobKey.getKeyString());
        }
    }
}

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new LongOperation().execute("");
    }

     private class LongOperation extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... params) {

                // Create a new HttpClient and Post Header
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://1-dot-ptm-blobstore.appspot.com/upload");

                try {

                    // Execute HTTP Post Request
                    HttpResponse response = httpclient.execute(httppost);

                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                }   


                return null;

            }
        }
}

When I launch my app I've an error from my app engine logs:

Must be called from a blob upload callback request.

But I don't really what I must do now ? Can you help me ? =) Thanks in advance !

Was it helpful?

Solution

Here's one simple solution: Upload to Appengine Blobstore in Android

Another one is to use Cloud Endpoints, i.e. create a REST API endpoint and use it to POST image data from your app: https://developers.google.com/appengine/docs/java/endpoints/

Also, more advanced example is the Mobile Backend Starter, which gives you a few more cool features: https://developers.google.com/cloud/samples/mbs/

And here's an article that goes with Mobile Backend Starter:

Connecting mobile developers to the cloud with Google Cloud Endpoints http://googlecloudplatform.blogspot.co.uk/2013/11/connecting-mobile-developers-to-the-cloud-with-google-cloud-endpoints.html

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top