2016-03-21 4 views
0

Я пытаюсь загрузить файл на Google диск с помощью outputstream. С скачать я был в состоянии получить InputStream таким образом:Загрузить файл на Google Диск с помощью outputstream

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

Я думаю, что невозможно напрямую написать OutputStream с помощью API-интерфейсов Google Диска HTTP. 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, чтобы он не блокировался.

Смежные вопросы