2016-12-19 43 views
0

我需要上傳視頻的API,這該是多麼我已經實現了OKHTTP要求:如何使用OkHTTP將視頻作爲多部分請求上傳? [Android]產品

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),並運行調試器,應用程序不會在任何時候結束,所以我假設請求沒有完成。什麼可能造成這種情況?這是否是正確的實施方式?

+0

我會嘗試使用'execute()'來代替'enqueue()'進行調試。 – PeterMmm

+0

它有什麼不同?請讓我知道'execute()'而不是'enqueue()'! – OBX

+0

你是否對協議'content://'有所瞭解?我期望'http://'在這裏。 – PeterMmm

回答

0

我不熟悉的OkHTTP庫,但有一件事我注意到,這將導致一個問題是,對於視頻領域應該是source_video,不fileas outlined here

您可能還希望在您的catch語句中添加一些日誌記錄以查看是否有任何內容可能因爲您忽略了任何潛在故障而失敗。

相關問題