
本文为大家分享了 AndroID Retrofit 2.0框架上传图片解决方案,具体内容如下
1.单张图片的上传
/** * 上传一张图片 * @param description * @param imgs * @return */ @Multipart @POST("/upload") Call<String> 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<String> 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<String> uploadImage(@Part("filename") String description,@Part("file\"; filename=\"image.png\"")Requestbody ...imgs); 调用:
Call<String> call = apimanager.uploadImage( m[0],requestbody1,requestbody2,null);
这样写看上去很是高端,不幸的是只能传一张
3.最后是实现胡过程
3.1创建fileUploadService接口
public interface fileUploadService { /** * 上传一张图片 * @param description * @param imgs * @return */ @Multipart @POST("/upload") Call<String> 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<String> uploadImage(@Part("filename") String description,@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<String> call = apimanager.uploadImage( m[0],null); call.enqueue(new Callback<String>() { @OverrIDe public voID onResponse(Response<String> 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接收:
@Controller public 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)); } } 关于AndroID上传功能的更多内容请点击专题:Android上传 *** 作汇总进行学习。
以上就是本文的全部内容,希望对大家的学习有所帮助。
总结以上是内存溢出为你收集整理的Android Retrofit 2.0框架上传图片解决方案全部内容,希望文章能够帮你解决Android Retrofit 2.0框架上传图片解决方案所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)