2016-08-22 255 views
2

我想發送音頻文件到服務器retrofit2。我遵循this教程,但該文件不是服務器接受的格式。基於此教程中,我試過如下:通過retrofit2將文件發送到服務器作爲對象

RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); 
MultipartBody.Part audio = MultipartBody.Part.createFormData("file", "file", requestBody); 

和接口:

@Headers("Content-Type: application/json") 
@Multipart 
@POST("app/") 
Call<JResponse> upload(@Part("file") RequestBody file); 

但是,沒有發送file:屬性。 (如果我更改@Part@Body它存在,但那麼有另一個問題)

我想知道如何發送以下格式的文件?我應該將音頻文件轉換爲base64格式嗎?

{ 'file' : audio_file } 
+0

你需要表現出更多的代碼... –

回答

5

爲了找到如何通過Retroit以下步驟將文件發送到服務器可以解決你的問題:

1-安裝PostMan

2-在PostMan中選擇Post並粘貼URL然後轉到Body選項卡並選擇form-data

由3- Key的一部分寫入服務器的文件名,並在Value的部分集合類型文件和上傳文件的願望。

enter image description here

4-單擊發送然後生成代碼

5-現在,您有類似以下內容:

enter image description here

6-現在只需一個步驟仍然去你的改造服務和糊狀(在我來說,我要上傳audio.mp3)信息:

@Multipart 
    @POST("app/") 
    Call<JResponse> upload(@Part("file\"; filename=\"audio.mp3\" ") RequestBody file); 

,並要求身體會是這樣的:

File file = new File("YOUR_PATH"); 
RequestBody temp = RequestBody.create(MediaType.parse("multipart/form-data"), file); 

使用this模式,併發送:

ServiceHelper.getInstance().sendAudio(temp).enqueue(new Callback<JResponse>() { 
      @Override 
      public void onResponse(Call<JResponse> call, Response<JResponse> response) { 
       Log.e("test", "onResponse: tst"); 

      } 

      @Override 
      public void onFailure(Call<JResponse> call, Throwable t) { 
       Log.e("test", "onResponse: tst"); 

      } 
     }); 
+0

什麼郵遞員來這裏幹什麼?你不要使用它。 –

相關問題