Uploads de mídia diretos e retomáveis (original) (raw)

Uploads de mídia diretos e retomáveis

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Este documento descreve como usar uploads de mídia diretos e retomáveis com a biblioteca de cliente das APIs do Google para Java.

Upload de mídia retomável

Ao fazer o upload de um arquivo de mídia grande para um servidor, use o upload de mídia retomável para enviar o arquivo bloco por bloco. As bibliotecas geradas pela API do Google contêm métodos de conveniência para interagir com o upload de mídia retomável.

O protocolo de upload de mídia retomável é semelhante ao upload de mídia retomável descrito na documentação da API Google Drive.

Elaboração do protocolo

O diagrama de sequência a seguir mostra como o protocolo de upload de mídia retomável funciona:
Diagrama de sequência mostrando como as solicitações e respostas se movem entre o cliente e o servidor.

Detalhes da implementação

As principais classes de interesse sãoMediaHttpUploadere MediaHttpProgressListener.

Se os métodos nas bibliotecas geradas específicas de serviço contiverem o mediaUploadno documento de descoberta, um método de conveniência é criado para esses métodos que usa umaInputStreamContentcomo parâmetro. (Para mais informações sobre como usar o upload de mídia com as APIs do Google serviço de descoberta, consulteUpload de mídia.

Por exemplo, o método insert da API Drive. oferece suporte a mediaUpload, e você pode usar o seguinte código para fazer upload de um arquivo:

class CustomProgressListener implements MediaHttpUploaderProgressListener { public void progressChanged(MediaHttpUploader uploader) throws IOException { switch (uploader.getUploadState()) { case INITIATION_STARTED: System.out.println("Initiation has started!"); break; case INITIATION_COMPLETE: System.out.println("Initiation is complete!"); break; case MEDIA_IN_PROGRESS: System.out.println(uploader.getProgress()); break; case MEDIA_COMPLETE: System.out.println("Upload is complete!"); } } }

File mediaFile = new File("/tmp/driveFile.jpg"); InputStreamContent mediaContent = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(mediaFile))); mediaContent.setLength(mediaFile.length());

Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent); request.getMediaHttpUploader().setProgressListener(new CustomProgressListener()); request.execute();

Você também pode usar o recurso de upload de mídia retomável sem a configuração bibliotecas geradas automaticamente. Exemplo:

File mediaFile = new File("/tmp/Test.jpg"); InputStreamContent mediaContent = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(mediaFile))); mediaContent.setLength(mediaFile.length());

MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer); uploader.setProgressListener(new CustomProgressListener()); HttpResponse response = uploader.upload(requestUrl); if (!response.isSuccessStatusCode()) { throw GoogleJsonResponseException(jsonFactory, response); }

Upload direto de mídia

O upload de mídia retomável está ativado por padrão, mas é possível desativá-lo e usá-lo upload de mídia direto, por exemplo, se você estiver fazendo upload de um arquivo pequeno. Direto o upload de mídia foi introduzido na 1.9.0-betada biblioteca de cliente das APIs do Google para Java.

O upload de mídia direto envia todo o arquivo em uma solicitação HTTP, em vez de o protocolo de upload de mídia retomável, que faz upload do arquivo em várias solicitações. Fazer um upload direto reduz o número de solicitações HTTP, mas aumenta o probabilidade de falhas (como falhas de conexão) que podem ocorrer com grandes de conteúdo.

O uso para upload de mídia direto é o mesmo descrito acima para upload de mídia retomável, além da chamada a seguir que informa ao MediaHttpUploaderpara fazer apenas envios diretos:

mediaHttpUploader.setDirectUploadEnabled(true);