UploadDataProvider

abstract class UploadDataProvider : Closeable


Classe abstrata que permite ao incorporador fornecer um corpo de upload para UrlRequest. Ela oferece suporte a uploads não divididos em partes (tamanho conhecido com antecedência) e divididos em partes (tamanho desconhecido com antecedência). Nem todos os servidores oferecem suporte a uploads divididos em partes.

Um upload é sempre dividido em partes, em vários uploads se os dados acabarem sendo enviados mais de uma vez, ou nunca dividido em partes.

Resumo

Construtores públicos

Funções públicas

Unit

Chamado quando esse UploadDataProvider não é mais necessário para uma solicitação, para que os recursos (como um arquivo) possam ser liberados explicitamente.

abstract Long

Se for um upload não dividido em partes, retorna o comprimento do upload.

abstract Unit
read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!)

Lê os dados de upload em byteBuffer.

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

Rebobina os dados de upload para o início.

Construtores públicos

UploadDataProvider

UploadDataProvider()

Funções públicas

fechar

fun close(): Unit

Chamado quando esse UploadDataProvider não é mais necessário para uma solicitação, para que os recursos (como um arquivo) possam ser liberados explicitamente.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo. Isso fará com que a solicitação falhe se ainda não estiver concluída. Caso contrário, ela será registrada.

getLength

abstract fun getLength(): Long

Se for um upload não dividido em partes, retorna o comprimento do upload. Sempre retorna -1 se for um upload dividido em partes.

Retorna
Long

o comprimento do upload para uploads não divididos em partes, -1 caso contrário.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo.

Lidos

abstract fun read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!): Unit

Lê os dados de upload em byteBuffer. Após a conclusão, a posição do buffer é atualizada para o final dos bytes lidos. O limite do buffer não é alterado. Cada chamada desse método precisa ser seguida por uma única chamada, síncrona ou assíncrona, para uploadDataSink: onReadSucceeded em caso de sucesso ou onReadError em caso de falha. Nem a leitura nem o rebobinamento serão chamados até que um desses métodos ou o outro seja chamado. Mesmo que o UrlRequest associado seja cancelado, um ou outro ainda precisa ser chamado antes que os recursos possam ser liberados com segurança. Gerar uma exceção também resultará na liberação de recursos e na falha da solicitação.

Observação: para uploads não divididos em partes, onReadSucceeded só precisa ser chamado quando a leitura for bem-sucedida e pelo menos um byte tiver sido lido em byteBuffer. Para uploads divididos em partes (o tamanho dos dados é desconhecido), é permitido chamar onReadSucceeded para a última parte com um buffer de bytes vazio.

Parâmetros
uploadDataSink: UploadDataSink!

O objeto a ser notificado quando a leitura for concluída.

byteBuffer: ByteBuffer!

O buffer para copiar os bytes lidos. Não altere o limite do byteBuffer.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo. onFailed será chamado com a exceção gerada definida como a causa da CallbackException.

rebobinar

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

Rebobina os dados de upload para o início. É invocado quando o Cronet exige que o provedor de dados de upload esteja em um estado equivalente a como se read nunca tivesse sido chamado.

Para sinalizar que a operação foi concluída, as implementações dessa função precisam chamar onRewindSucceeded para indicar sucesso ou onRewindError em caso de falha. Mesmo que o UrlRequest associado seja cancelado, um ou outro ainda precisa ser chamado antes que os recursos possam ser liberados com segurança. Gerar uma exceção do método é equivalente a chamar onRewindError. Se o rebobinamento for indisponível (por exemplo, se a leitura for feita em um stream único), isso precisará chamar onRewindError imediatamente.

O implementador pode presumir com segurança que nem read nem uma chamada rewind simultânea serão emitidas até que notifiquem o coletor de que o rebobinamento foi concluído, conforme descrito no parágrafo anterior.

Esse método é usado internamente pelo Cronet se o corpo precisar ser enviado várias vezes. Isso pode ocorrer em muitas situações diferentes, por exemplo, ao seguir redirecionamentos ou ao tentar novamente as solicitações após um tempo limite ou uma desconexão de rede. Embora a implementação do rebobinamento seja geralmente opcional, as solicitações que acabam exigindo isso falharão, a menos que o rebobinamento seja implementado.

Parâmetros
uploadDataSink: UploadDataSink!

O objeto a ser notificado quando a operação de rebobinamento for concluída, com ou sem sucesso.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo. onFailed será chamado com a exceção gerada definida como a causa da CallbackException.