2014-12-07 85 views
1

我正在用原生應用程序和雲應用程序組件構建一個非常簡單的項目。 Android應用程序只需拍攝一張照片,並通過POST將其上傳到URL。然後,雲應用程序將顯示接收到的照片,這些照片存儲在GAE數據存儲區中。如何從Android發送圖像並在GAE上接收圖像?

目前,Android應用似乎正確發送照片,並且它從服務器接收HTTP OK。但是,當我去查看雲應用程序中的圖像時,我沒有看到圖像,而且它看起來像一個空白的條目。

如果我的android應用程序組件無法正確發送圖像,或者雲應用程序組件無法接收它,我現在還不確定。我已經能夠成功測試圖片可以上傳,通過使用一個簡單的形式發佈到上傳網址,這很好。

我唯一看不到的地方是android代碼沒有設置'照片'的標題名稱並將其分配給照片的數據。但是,我似乎無法弄清楚如何設定,我不相信這是唯一的問題。

我用這個頁面來幫助Android的代碼發送文件:How to send a file in Android from mobile to server using http?

這裏是重要的Android代碼:

private class SendPhotoTask extends AsyncTask<File, Void, Void> { 
    @Override 
    protected Void doInBackground(File... photoFile) { 
     if (photoFile != null) { 
      String urlToConnect = "http://example.com/upload"; 
      // Use a static file for testing 
      File photoFile2 = new File("/storage/emulated/0/Pictures/PNG_20141206_190223_-1388180531.png"); 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 

       HttpPost httppost = new HttpPost(urlToConnect); 

       InputStreamEntity reqEntity = new InputStreamEntity(
         new FileInputStream(photoFile2), -1); 
       reqEntity.setContentType("binary/octet-stream"); 
       reqEntity.setChunked(true); // Send in multiple parts if needed 
       httppost.setEntity(reqEntity); 
       HttpResponse response = httpclient.execute(httppost); 
       Log.d(DEBUG_TAG, response.getStatusLine().toString()); 
      } catch (Exception e) { 
       Log.d(DEBUG_TAG, "Exception Caught: " + e); 
      } 
     } 
     return null; 
    } 
} 

的SendPhotoTask類與此執行:

new SendPhotoTask().execute(photoFile); 

這是服務器上非常簡單的代碼(用Python編寫,使用webapp2),它接受我的圖像:

class Gallery(BaseRequestHandler): 

    def post(self): 
     gallery_name = self.request.get('gallery_name', 
             DEFAULT_GALLERY_NAME) 
     greeting = Photo(parent=gallery_key(gallery_name)) 

     greeting.photo = base64.b64encode(str(self.request.get('photo'))) 
     greeting.put() 

     query_params = {'gallery_name': gallery_name} 
     self.redirect('/?' + urllib.urlencode(query_params)) 

我在這裏做錯了什麼?

+0

我想說,首先添加一些日誌記錄到像photoFile == null這樣的邊緣,並記錄服務器上的所有內容,看看是否有任何請求完成。 此外,當使用「MultipartEntity」(即使有一個部分?)像這樣的答案時,人們似乎會得到更好的結果:http://stackoverflow.com/a/1068132/1334771(以及如何實例化一個MultipartEntity http ://stackoverflow.com/a/19196621/1334771) – halflings 2014-12-07 09:39:02

回答