Я получаю сбой при отправке строки Base64 на сервер

#android #base64 #okhttp

#Android #base64 #okhttp

Вопрос:

Как следует из названия, я кодирую строку Base64. Я делаю это так:

 public String getStringFile2(File file){
    String retorno="";
    InputStream inputStream = null;//You can get an inputStream using any IO API
    try {
        inputStream = new FileInputStream(file.getAbsolutePath());
        byte[] video = new byte[inputStream.available()];
        byte[] base64 = Base64.encode(video,Base64.NO_WRAP);
        String s = new String(base64, "UTF8");
        retorno=s;
    } catch (FileNotFoundException e) {
        Log.i("David", "FileNotFoundException");
        e.printStackTrace();
    } catch (IOException e) {
        Log.i("David", "IOException");
        e.printStackTrace();
    }
    Log.i("David", retorno);
return retorno;
}
  

После этого я отправляю ее на сервер таким образом:

 public void videoUploadTo()
{
    final OkHttpClient cliente=new OkHttpClient();
    File file=new File(vidPath);
    HttpUrl.Builder urlBuilder = HttpUrl.parse(getString(R.string.sendvideourl)).newBuilder();
    String video=getStringFile2(file);
    String url = urlBuilder.build().toString();
    RequestBody requestBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("operatingsystem", "Android")
            .addFormDataPart("mobilemodel",Utils.getDeviceName())
            .addFormDataPart("mobileversion",String.valueOf(Utils.getAndroidVersion()))
            .build();
    Request request=new Request.Builder()
            .post(requestBody)
            .addHeader("eid", String.valueOf(almacen.getEvento().getId()))
            .addHeader("token",almacen.getToken())
            .addHeader("video",video)
            .url(url)
            .build();
    cliente.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Log.i("David", "onFailure");
            e.printStackTrace();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Log.i("David", "onResponse");
        }
    });
}
  

(Да, мне нужно отправить информацию в заголовках)

Почему это сбой? Я думаю, что это не тайм-аут, потому что получение ответа не занимает слишком много времени.

Любая помощь? Спасибо.

РЕДАКТИРОВАТЬ: если я комментирую строку .AddHeader («video», video), я получаю 200 … но мне нужно отправить эту строку.

Комментарии:

1. Вы кодируете пустой video буфер. Кроме того, вам также не следует возиться с кодировкой utf-8.

2. IOException e Вы не регистрируете и не сообщаете нам значение e.getMessage() .

3. I am getting onFailure .... Это ваше собственное сообщение. Вы отбрасываете реальное сообщение.

4. Сообщения нет…

5. Он имеет случайное содержимое в зависимости от использования этой выделенной памяти ранее. Но вы не загружаете свой файл в этот буфер.