2015-11-30 51 views
0

我以前使用的Apache瓶坯文件上傳:文件上傳不與改造工作

FileBody fileBody = new FileBody(new File(path), mimeType); 
FormBodyPart formBodyPart = new FormBodyPart("partName", fileBody); 

MultipartEntity reqEntity = new MultipartEntity(); 
reqEntity.addPart(formBodyPart); 

... 

這將成功上傳的文件與「零件名稱」

交換零件名稱改裝:

public interface UploadService { 
    @Multipart 
    @PUT("/somepath/{id}/upload") 
    Call<ResponseBody> upload(@Path("id") String id, @Part("partName") RequestBody file); 
} 

var id = 123; 
UploadService service = retrofit.create(UploadService.class); 
File file = new File(path); 
RequestBody requestBody = RequestBody.create(MediaType.parse(mimeType), file); 

Response<ResponseBody> response = service.upload(id, requestBody).execute(); 

請求的partName未設置。我究竟做錯了什麼?

+1

我的答案在http://stackoverflow.com/questions/33932916/how-to-post-an-image-to-server-in-android/33952163#33952163使用OkHttp,但是,國際海事組織,也許它的邏輯可以幫助你一點點 – BNK

+0

非常感謝。我可以嘗試找出改造後出現的問題。最糟糕的情況就是使用okhttp作爲解決方法。 – lostintranslation

+0

IMO,你可以在'Headers.of(「Content-Disposition」,「form-data; name = \」file \「; filename = \」ic_launcher.png \「」)檢查,因爲我的web服務(Asp .Net Web API),當android客戶端沒有在這裏設置'filename'時,web服務並不認爲這是多部分請求 – BNK

回答

0

我的代碼上傳文件,如下改造: 符合API:

@Multipart 
@POST("url") 
Call<Response> uploadImage(@Path("id") long id, @Part("file\"; filename=\"image.jpg") RequestBody file); 

改造要求:

Retrofit retrofit = new Retrofit.Builder().baseUrl(URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
ApiClass apiClass = retrofit.create(ApiClass.class); 
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), imageFile); 
Call<Response> call = apiClass.uploadImage(id, requestBody); 

希望它可以幫助你,祝你好運!