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/
  • 相关阅读:
    nohup
    wonder vscode plugins
    myhome vscode plugins
    virtural machine eth1
    单片机电子时钟的设计(期末课程设计)
    解决Eclipse中更改HTML页面后,浏览器查看页面无变化
    ASP.NET 中的 Session对象
    windows下mysql数据库导入导出
    TP5.1分表,partition分表实例,根据自增主键水平分表
    PHP操作mysql数据库分表的方法
  • 原文地址:https://www.cnblogs.com/duwei/p/retrofit2_upload_image_file.html
Copyright © 2011-2022 走看看