我试图在POST中将转换后的文件(Base64 - String)作为参数发送,文件大约为8 MB,但发送大约需要4分钟。有没有办法加快?
接口:
@FormUrlEncoded
@POST("upload")
Call<Upload> upload(@Field("CONTENT") String content);
改造实例:
public class RetrofitClientInstance {
private static Retrofit retrofit;
private static OkHttpClient client;
public static Retrofit getRetrofitInstance(String url) {
if (retrofit == null && !url.isEmpty()) {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(url)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}}
呼叫:
private void upload(){
Api api = RetrofitClientInstance.getRetrofitInstance(SharedUtils.SERVER_URL).create(Api.class);
Call<Upload> request = api.upload(getBase64FromFile());
request.enqueue(new Callback<Upload>() {
@Override
public void onResponse(Call<Upload> call, Response<Upload> response) {
}
@Override
public void onFailure(Call<Upload> call, Throwable t) {
}
});
}
尝试在上传之前压缩文件或图像,因为完成它需要花费很多时间
首先,您正在使用enqueue()方法进行改造,这是一种执行代码的异步方式,并且在成功执行时已经注册了对这些方法的回调,您将在onResponse()方法中接收调用但是如果失败,您将获得控制onFailure()方法。
这将从守护程序线程生成一个执行线程,该线程创建另一个执行线程,您可能永远不知道该线程何时根据操作系统优先级执行。
使用execute()方法以同步方式执行此操作,然后检查它将给出正确结果的响应时间。