| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package com.guiying.common.glide;
- import com.bumptech.glide.Priority;
- import com.bumptech.glide.load.data.DataFetcher;
- import com.bumptech.glide.load.model.GlideUrl;
- import com.bumptech.glide.util.ContentLengthInputStream;
- import com.guiying.common.utils.CloseUtils;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Map;
- import okhttp3.OkHttpClient;
- import okhttp3.Request;
- import okhttp3.Response;
- import okhttp3.ResponseBody;
- /**
- * Fetches an {@link InputStream} using the okhttp library.
- */
- public class OkHttpStreamFetcher implements DataFetcher<InputStream> {
- private final OkHttpClient client;
- private final GlideUrl url;
- private InputStream stream;
- private ResponseBody responseBody;
- public OkHttpStreamFetcher(OkHttpClient client, GlideUrl url) {
- this.client = client;
- this.url = url;
- }
- @Override
- public InputStream loadData(Priority priority) throws Exception {
- Request.Builder requestBuilder = new Request.Builder()
- .url(url.toStringUrl());
- for (Map.Entry<String, String> headerEntry : url.getHeaders().entrySet()) {
- String key = headerEntry.getKey();
- requestBuilder.addHeader(key, headerEntry.getValue());
- }
- Request request = requestBuilder.build();
- Response response = client.newCall(request).execute();
- responseBody = response.body();
- if (!response.isSuccessful()) {
- throw new IOException("Request failed with code: " + response.code());
- }
- long contentLength = responseBody.contentLength();
- stream = ContentLengthInputStream.obtain(responseBody.byteStream(), contentLength);
- return stream;
- }
- @Override
- public void cleanup() {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- // Ignored
- }
- }
- if (responseBody != null) {
- CloseUtils.closeIO(responseBody);
- }
- }
- @Override
- public String getId() {
- return url.getCacheKey();
- }
- @Override
- public void cancel() {
- }
- }
|