2012-09-18 2 views
1

카메라를 사용하여 사진을 찍은 다음 Android 드라이브를 만들어 Google 드라이브 계정에 업로드하려고 시도했습니다. 여기에 내가 사용하고있는 코드 조각은 다음과 같습니다에Android 앱에서 Google 드라이브에 jpeg 업로드 "예기치 않은 스트림 종료"

09-17 22:11:31.683: WARN/HttpTransport(11701): exception thrown while executing request 
    java.io.IOException: unexpected end of stream 
    at libcore.net.http.FixedLengthOutputStream.close(FixedLengthOutputStream.java:58) 
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:88) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:991) 
    at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:279) 
    at com.google.api.services.drive.Drive$Files$Insert.executeUnparsed(Drive.java:309) 
    at com.google.api.services.drive.Drive$Files$Insert.execute(Drive.java:331) 
    at com.xxxxxx.UploadImageService$2.run(UploadImageService.java:143) 
    at java.lang.Thread.run(Thread.java:856) 

내가 Google 드라이브를 통해 강화 및 클라이언트 코드 :

HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 
    Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null); 
    b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() { 
     public void initialize(JsonHttpRequest request) throws IOException { 
      DriveRequest driveRequest = (DriveRequest) request; 
      driveRequest.setPrettyPrint(true); 
      driveRequest.setKey(MY_CLIENT_ID); 
      driveRequest.setOauthToken(token); 
     } 
    }); 

    final Drive drive = b.build(); 


    final com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File(); 
    body.setTitle(mCurrentPhotoPath.substring(mCurrentPhotoPath.lastIndexOf("/") + 1, mCurrentPhotoPath.length())); 
    body.setDescription("A Test File"); 
    body.setMimeType("image/jpeg"); 

    java.io.File file = new java.io.File(mCurrentPhotoPath); 

    final FileContent mediaContent = new FileContent("image/jpeg", file); 
    //final InputStreamContent mediaContent = new InputStreamContent("image/jpeg", new FileInputStream(file)); 

    new Thread(new Runnable() { 
     public void run() { 
      try { 
       com.google.api.services.drive.model.File file = drive.files().insert(body, mediaContent).execute(); 

       System.out.println("Title: " + file.getTitle()); 
       System.out.println("Description: " + file.getDescription()); 
       System.out.println("MIME type: " + file.getMimeType()); 
      } 
      catch (GoogleJsonResponseException e) { 
       GoogleJsonError error = e.getDetails(); 

       System.err.println("Error code:" + error.getCode()); 
       System.err.println("Error message: " + error.getMessage()); 

       // More error information can be retrieved with error.getErrors(). 
      } 
      catch (HttpResponseException e) { 
       // No Json body was returned by the API. 
       System.err.println("HTTP Status code: " + e.getStatusCode()); 
       System.err.println("HTTP Reason: " + e.getMessage()); 
      } 
      catch (IOException e) { 
       // Other errors (e.g connection timeout, etc.). 
       System.out.println("An error occurred: " + e); 
      } 
     } 
    }).start(); 

무엇이 일어나고있는 것은 나는 다음과 같은 로그 캣에서 예외를 얻고 있다는 것입니다 그것이 실제로 무엇을했는지 보아라. 그것은 실제로 두 번 작동하는 것처럼 보였다. 그러나 이제는 다시 실패합니다.

아이디어가 있으십니까?

답변

0

내 문제를 파악한 것 같습니다. 드라이브 API에서 얻은 오류는 이상하지만, 궁극적으로는 카메라에서 이미지를 캡처하고 두 번째까지만 타임 스탬프로 저장하려고했습니다. 나는 파일 이름에 밀리 초를 추가했으며 지금까지 예외를 다시 보지 못했습니다. 우리가 볼거야.

관련 문제