package com.zhy.http.okhttp.request; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.Callback; import com.zhy.http.okhttp.utils.Exceptions; import java.io.File; import java.util.Map; import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; /** * Created by zhy on 15/12/14. */ public class PostFileRequest extends OkHttpRequest { private static MediaType MEDIA_TYPE_STREAM = MediaType.parse("application/octet-stream"); private File file; private MediaType mediaType; public PostFileRequest(String url, Object tag, Map<String, String> params, Map<String, String> headers, File file, MediaType mediaType,int id) { super(url, tag, params, headers,id); this.file = file; this.mediaType = mediaType; if (this.file == null) { Exceptions.illegalArgument("the file can not be null !"); } if (this.mediaType == null) { this.mediaType = MEDIA_TYPE_STREAM; } } @Override protected RequestBody buildRequestBody() { return RequestBody.create(mediaType, file); } @Override protected RequestBody wrapRequestBody(RequestBody requestBody, final Callback callback) { if (callback == null) return requestBody; CountingRequestBody countingRequestBody = new CountingRequestBody(requestBody, new CountingRequestBody.Listener() { @Override public void onRequestProgress(final long bytesWritten, final long contentLength) { OkHttpUtils.getInstance().getDelivery().execute(new Runnable() { @Override public void run() { callback.inProgress(bytesWritten * 1.0f / contentLength,contentLength,id); } }); } }); return countingRequestBody; } @Override protected Request buildRequest(RequestBody requestBody) { return builder.post(requestBody).build(); } }