如何使用OkHTTP将视频作为多部分请求上传? [Android]

时间:2016-12-19 16:15:40

标签: java android okhttp3 okhttp

我需要将视频上传到API,这就是我实施OKHTTP请求的方式:

 private void makeRequest(Uri uri)
{
    pr1.show();

    try
    {
        String path = uri.toString();
        Log.e("PATH",path);
        File file = new File(new URI(path));
        try {

            RequestBody requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("file", file.getName(),
                            RequestBody.create(MediaType.parse("video/mp4"), file))
                    .addFormDataPart("title", "damn")
                    .build();

            Request request = new Request.Builder()
                    .url(URL)
                    .header("SproutVideo-Api-Key","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
                    .post(requestBody)
                    .build();

            client.newCall(request)
                    .enqueue(new Callback() {
                        @Override
                        public void onFailure(final Call call, IOException e)
                        {

                        }

                        @Override
                        public void onResponse(Call call, final Response response) throws IOException {
                            String res = response.body().string();
                            Log.e("SUCCESS",""+res);
                            pr1.dismiss();


                        }
                    });


        } catch (Exception ex) {
            // Handle the error
        }
    }
    catch (Exception e){}

}

但是,我无法完成成功请求。

记录此行Log.e("PATH",path);显示:

  

内容://com.android.providers.media.documents/document/video%3A75611

当我在这一行添加换行符:client.newCall(request)并运行调试器时,应用程序不会在任何时候结束,所以我认为请求没有完成。可能是什么导致了这个?这是正确的实施方式吗?

1 个答案:

答案 0 :(得分:0)

我不熟悉OkHTTP库,但有一点我注意到会导致问题的是视频字段应为source_video,而不是file {{3} }。

您可能还想在catch语句中添加一些日志记录,以查看是否有任何内容可能会以静默方式失败,因为您似乎忽略了任何潜在的失败。