zoukankan      html  css  js  c++  java
  • 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:

    未完待续...

    相关链接, 这里有实现

    转载请注明出处:http://duwei.cnblogs.com/
  • 相关阅读:
    python--binascii--二进制和ASCII编码的二进制的转换
    python--you-get视频下载
    python--AES加密
    nodejs的简单爬虫
    golang学习之接口型函数
    golang学习之defer
    golang学习之slice基本操作
    微信小程序初体验
    vuex构建笔记本应用学习
    2016年终总结
  • 原文地址:https://www.cnblogs.com/duwei/p/retrofit2_upload_image_file.html
Copyright © 2011-2022 走看看