Retrofit2 上傳圖片等文件


普通寫法:

//創建表單的普通字段
public
static RequestBody createFormBody(String content) {   RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), content);   return body; }
//創建Multipart, fieldName為表單字段名
public static MultipartBody.Part createFilePart(String fieldName, File file) {
  RequestBody requestFile = RequestBody.create(MediaType.parse("application/otcet-stream"), file);
  MultipartBody.Part body = MultipartBody.Part.createFormData(fieldName, file.getName(), requestFile);
   return body;
}
//Service方法, 普通form表單使用RequestBody, 並且@Part注解要寫表單字段名
//文件用MultipartBody.Part
@Multipart
@POST(API.VIDEO_MODULE_UPLOAD_VIDEO)
Call<Object> uploadImage(@Part MultipartBody.Part imagePicFile,
                         @Part MultipartBody.Part videoFile,
                         @Part("videoDescription") RequestBody desc,
                         @Part("videoPicWidth") RequestBody videoPicWidth,
                         @Part("videoPicHeight") RequestBody videoPicHeight);
   
//上傳
getService(VideoService.class).uploadVideo(
                createFilePart("videoPicFile",new File(mCoverPath)),
                createFilePart("videoFile",new File(mPath)),
                createFormBody(etVideoDesc.getText().toString().trim()),
                createFormBody(width),
                createFormBody(height))
                .enqueue(new JsonResultCallback<Object>(context()) {
                    @Override
                    public void onSuccess(Call<Object> call, Object data) {
                        super.onSuccess(call, data);
                        //.....
                    }
                    @Override
                    public void onFinish(Call<Object> call) {
                        //...
                    }
                });

注意: 如果你使用了 GsonRequestBodyConverter 或類似的RequestBodyConverter, 一定記得要略過@Multipart 標注的Service方法, 否則你的File會被轉為文件路徑的字符串, 這是一個坑

  

另一種, 自定義FileRequestBodyConverter:

未完待續...

相關鏈接, 這里有實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM