将Base64字符串上传为Field(8MB)需要4分钟

问题描述 投票:0回答:2

我试图在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) {

        }
    });
}
java android post base64 retrofit2
2个回答
0
投票

尝试在上传之前压缩文件或图像,因为完成它需要花费很多时间


0
投票

首先,您正在使用enqueue()方法进行改造,这是一种执行代码的异步方式,并且在成功执行时已经注册了对这些方法的回调,您将在onResponse()方法中接收调用但是如果失败,您将获得控制onFailure()方法。

这将从守护程序线程生成一个执行线程,该线程创建另一个执行线程,您可能永远不知道该线程何时根据操作系统优先级执行。

使用execute()方法以同步方式执行此操作,然后检查它将给出正确结果的响应时间。

© www.soinside.com 2019 - 2024. All rights reserved.