本文为大家分享了 Android Retrofit 2.0框架上传图片解决方案,具体内容如下

1.单张图片的上传

/**   * 上传一张图片   * @param description   * @param imgs   * @return   */  @Multipart  @POST("/upload")  Call uploadImage(@Part("fileName") String description,         @Part("file\"; filename=\"image.png\"")RequestBody imgs);

2.多张图片的上传

/**  * 上传三张图片  * @param description  * @param imgs  * @param imgs1  * @param imgs3  * @return  */  @Multipart  @POST("/upload")  Call uploadImage(@Part("fileName") String description,        @Part("file\"; filename=\"image.png\"")RequestBody imgs,        @Part("file\"; filename=\"image.png\"")RequestBody imgs1,        @Part("file\"; filename=\"image.png\"")RequestBody imgs3);

注意:目前是提供传3张,要想多上传目前我发现的方法就是想要多传一张,就多增加一个参数
@Part("file\"; filename=\"image.png\"")RequestBody imgs,以此类推。

大家看到上面觉得写法很漏,但是用于能力有限,只能想到这样。用Java中的可变参数解决之后,就只能传一张。不能多张。

@Multipart  @POST("/upload")  Call uploadImage(@Part("fileName") String description,        @Part("file\"; filename=\"image.png\"")RequestBody ...imgs);

 调用:
Call call = apiManager.uploadImage( m[0],requestBody1,requestBody2,null); 

这样写看上去很是高端,不幸的是只能传一张

3.最后是实现胡过程
3.1创建FileUploadService接口

public interface FileUploadService { /**  * 上传一张图片  * @param description  * @param imgs  * @return  */ @Multipart @POST("/upload") Call uploadImage(@Part("fileName") String description,        @Part("file\"; filename=\"image.png\"")RequestBody imgs);  /**  * 上传三张图片  * @param description  * @param imgs  * @param imgs1  * @param imgs3  * @return  */ @Multipart @POST("/upload") Call uploadImage(@Part("fileName") String description,        @Part("file\"; filename=\"image.png\"")RequestBody imgs,        @Part("file\"; filename=\"image.png\"")RequestBody imgs1,        @Part("file\"; filename=\"image.png\"")RequestBody imgs3);}

 3.2创建Retrofit对象

private static final Retrofit sRetrofit = new Retrofit .Builder()   .baseUrl(ENDPOINT)   .addConverterFactory(GsonConverterFactory.create())//   .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 使用RxJava作为回调适配器   .build();  private static final FileUploadService apiManager = sRetrofit.create(FileUploadService.class);

 3.3调用上传的方法

public static void upload(String path){  String descriptionString = "hello, this is description speaking";  String[] m = new String[2]; m[0]= "share.png"; m[1]= "Screenshot_20160128-140709.png"; File[] ssssss= new File[2]; File file1 = new File("/storage/emulated/0/sc/share.png"); File file = new File("/storage/emulated/0/Pictures/ScreenShots/Screenshot_20160128-140709.png"); ssssss[0]=file; ssssss[0]=file1; RequestBody requestBody[] = new RequestBody[3]; RequestBody requestBody1 =   RequestBody.create(MediaType.parse("multipart/form-data"), file); RequestBody requestBody2 =   RequestBody.create(MediaType.parse("multipart/form-data"), file1); requestBody[0]=requestBody1; requestBody[1]=requestBody2; Call call = apiManager.uploadImage( m[0],requestBody1,requestBody2,null); call.enqueue(new Callback() {  @Override  public void onResponse(Response response, Retrofit retrofit) {   Log.v("Upload", response.message());   Log.v("Upload", "success");  }   @Override  public void onFailure(Throwable t) {   Log.e("Upload", t.toString());  } }); }

4.服务器段代码:
服务器用的是struts接收:

@Controllerpublic class GetToken extends ActionSupport {   /**  *  */ private static final long serialVersionUID = 1L; private File[] file; private String[] fileName; public File[] getFile() {  return file; } public void setFile(File[] file) {  this.file = file; } public String[] getFileName() {  return fileName; } public void setFileName(String[] fileName) {  this.fileName = fileName; }   @Action("/upload") public void login() {  System.out.println("------"+Arrays.toString(file));  System.out.println("------"+Arrays.toString(fileName)); }         }

上传视频,随便找的一个接口,只是举个例子而已

@Multipart    @POST("Fmsg_add_video.asp")    Observable newVideoAdd(@retrofit.http.Part("token") RequestBody token,                                       @retrofit.http.Part("role") RequestBody role,                                       @retrofit.http.Part("pk_image_news_image_id") RequestBody pk_image_news_id,                                       @retrofit.http.PartMap Map params);
 public Observable addVideo(String role, String pk_image_news_id, String path, String videoName) {        RequestBody token = RequestBody.create(null, getPreferencesHelper().getAccessToken());        RequestBody roleR = RequestBody.create(null, role);        RequestBody pk_image_news_idR = RequestBody.create(null, pk_image_news_id);        File file = new File(path);        RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);        Map video = new HashMap<>();        String key = "file1\";filename=\"" + videoName;        video.put(key, requestBody);        return mRibotService.newVideoAdd(token, roleR, pk_image_news_idR, video);    }

以上就是本文的全部内容,希望对大家的学习有所帮助。


更多相关文章

  1. Android matrix 控制图片的旋转、缩放、移动
  2. android WebView 图片缩放功能小结
  3. Android 主流图片库Picasso Glide Fresco对比分析
  4. android手机客户端上传文件,java servlet服务器端接收并保存到服
  5. Android 控件之Gallery图片集
  6. Android背景图片平铺
  7. Android保存32位BMP格式图片
  8. Android 获取手机本地图片所在的位置
  9. Android 网络显示图片

随机推荐

  1. ok6410 android driver(4)
  2. android全屏无标题
  3. 让Android支持透明状态栏
  4. android 自定义主题样式
  5. android笔记
  6. android例子
  7. android时间控件DigitalClock的使用
  8. Android(安卓)Desigin Library
  9. 收集android的三个小tip
  10. 【30篇突击 android】源码统计七