2014-12-07 2 views
1

네이티브 앱과 클라우드 앱 구성 요소로 매우 간단한 프로젝트를 만들고 있습니다. 안드로이드 앱은 단순히 사진을 찍어 POST를 통해 URL로 업로드합니다. 그런 다음 클라우드 앱은 GAE 데이터 스토어에 저장된 사진을 표시합니다.Android에서 이미지를 보내고 GAE에서 이미지를받는 방법은 무엇인가요?

현재 안드로이드 앱 으로 보이며 사진을 올바르게 보내고 서버에서 HTTP OK를받습니다. 그러나 클라우드 앱에서 이미지를 확인하려고하면 이미지가 표시되지 않고 빈 항목처럼 보입니다.

내 안드로이드 앱 구성 요소가 이미지를 올바르게 보내지 못하거나 클라우드 앱 구성 요소가 이미지 수신에 실패했는지 여부는 확실하지 않습니다. 업로드 URL에 게시하는 간단한 양식을 사용하여 이미지를 업로드 할 수 있는지 성공적으로 테스트 할 수있었습니다.

손에서 볼 수있는 유일한 점은 안드로이드 코드가 '사진'이라는 헤더 이름을 설정하여 사진의 데이터에 할당한다는 것입니다. 그러나, 나는 그것을 설정하는 방법을 알아낼 수 없습니다, 그리고 나는 그것이 유일한 문제가 여기에 있다고 확신하지 않습니다.

I 파일 전송을위한 안드로이드 코드에 도움이 페이지를 사용

:

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); 
다음 How to send a file in Android from mobile to server using http?

는 중요한 안드로이드 코드

그리고 내 이미지를 허용하는 서버 (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과 같은 edgecases에 일부 로깅을 추가하고 요청이 완료되었는지 서버에있는 모든 것을 기록한다고 말하고 싶습니다. 또한이 답변에서와 같이 "MultipartEntity"(한 부분으로도 사용)를 사용하면 더 좋은 결과를 얻는 것처럼 보입니다. http://stackoverflow.com/a/1068132/1334771 (여기 및 MultipartEntity http : //stackoverflow.com/a/19196621/1334771) – halflings

답변

관련 문제