Télécharger le fichier binaire de OKHTTP

Je suis en utilisant OKHTTP client pour la mise en réseau dans mon application android.

Cette exemple montre comment télécharger des fichier binaire. Je voudrais savoir comment obtenir de l'inputstream de fichier binaire à télécharger avec OKHTTP client.

Voici la liste de l'exemple :

public class InputStreamRequestBody extends RequestBody {

    private InputStream inputStream;
    private MediaType mediaType;

    public static RequestBody create(final MediaType mediaType, 
            final InputStream inputStream) {
        return new InputStreamRequestBody(inputStream, mediaType);
    }

    private InputStreamRequestBody(InputStream inputStream, MediaType mediaType) {
        this.inputStream = inputStream;
        this.mediaType = mediaType;
    }

    @Override
    public MediaType contentType() {
        return mediaType;
    }

    @Override
    public long contentLength() {
        try {
            return inputStream.available();
        } catch (IOException e) {
            return 0;
        }
    }

    @Override
    public void writeTo(BufferedSink sink) throws IOException {
        Source source = null;
        try {
            source = Okio.source(inputStream);
            sink.writeAll(source);
        } finally {
            Util.closeQuietly(source);
        }
    }
}

Code actuel pour la simple requête get est:

OkHttpClient client = new OkHttpClient();
request = new Request.Builder().url("URL string here")
                    .addHeader("X-CSRFToken", csrftoken)
                    .addHeader("Content-Type", "application/json")
                    .build();
response = getClient().newCall(request).execute();

Maintenant, comment puis-je convertir la réponse à InputStream. Quelque chose qui ressemble à la réponse de Apache HTTP Client comme cela pour OkHttp réponse:

InputStream is = response.getEntity().getContent();

MODIFIER

Accepté de répondre à partir de ci-dessous.
Mon code modifié:

request = new Request.Builder().url(urlString).build();
response = getClient().newCall(request).execute();

InputStream is = response.body().byteStream();

BufferedInputStream input = new BufferedInputStream(is);
OutputStream output = new FileOutputStream(file);

byte[] data = new byte[1024];

long total = 0;

while ((count = input.read(data)) != -1) {
    total += count;
    output.write(data, 0, count);
}

output.flush();
output.close();
input.close();
  • vérifier mon édité réponse, je suis en attente de vos commentaires
  • Merveilleux!
  • heureux, il a travaillé pour vous l'homme 😀
  • comme une note de côté, votre InputStreamRequestBody n'est pas d'aller travailler si il y a une ioexception de la demande et de la HttpEngine est fixé à réessayer. Voir github.com/square/okhttp/blob/master/okhttp/src/main/java/com/... la ligne 202, writeTo est appelée dans une boucle while. Il va provoquer une erreur. (Je suis tombé sur ce pendant le téléchargement à partir d'un content:// inputstream)
InformationsquelleAutor pratsJ | 2014-09-17