Модификация загрузки строки Base64 в виде поля (8 МБ) занимает 4 минуты - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь отправить преобразованный файл (Base64 - String) в качестве параметра в POST, файл занимает около 8 МБ, но отправка занимает около 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) {

        }
    });
}

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Прежде всего, вы используете метод модификации enqueue (), который является асинхронным способом выполнения кода, и вы зарегистрировали обратные вызовы этих методов при успешном выполнении, вы получите вызов внутри метода onResponse (), но при ошибке,вы получите контроль внутри метода onFailure ().

Это создаст поток выполнения из потока демона, который создает другой поток выполнения, о котором вы никогда не узнаете, когда этот поток будет выполнен на основе приоритета ОС.

Используйте метод execute (), чтобы выполнить это синхронно, а затем проверьте время отклика, которое даст правильный результат.

0 голосов
/ 21 сентября 2018

Попробуйте сжать файл или изображение перед загрузкой, потому что это займет много времени

...