2016-03-21 135 views
0

我正嘗試使用outputstream將文件上傳到Google雲端硬盤。隨着下載我能夠得到InputStream這樣:使用輸出流將文件上傳到Google雲端硬盤

public void downloadStarted() throws Exception 
    { 
     HttpResponse resp = drive.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute(); 
     serverInputStream = resp.getContent(); 
    } 

有關上載我有一個工作的這個樣本測試:

private static File uploadFile(boolean useDirectUpload) throws IOException 
{ 
    File fileMetadata = new File(); 
    fileMetadata.setTitle(UPLOAD_FILE.getName()); 

    FileContent mediaContent = new FileContent("*/*", UPLOAD_FILE); 

    Drive.Files.Insert insert = drive.files().insert(fileMetadata, mediaContent); 

    MediaHttpUploader uploader = insert.getMediaHttpUploader(); 

    uploader.setDirectUploadEnabled(useDirectUpload); 
    uploader.setProgressListener(new FileUploadProgressListener()); 
    return insert.execute(); 
} 

,但我真的需要outputstream,而且不知道如何得到它。任何幫助?

回答

1

我認爲用Google Drive HTTP API直接編寫OutputStream是不可能的。 Drive.Files.create()insert()接受AbstractInputStreamContent,所以它必須是InputStream。一種解決方法是這樣的:

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
// use out 
File file = drive.files().create(fileMetadata, new ByteArrayContent("", 
    out.toByteArray())).setFields("id").execute(); 

另一個想法可能工作是使用PipedInputStream/PipedOutputStream。將drive.files().create(fileMetadata, pipedInputstream).setFields(id").execute()放在Thread的內部,這樣它就不會阻塞。

相關問題