欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Retrofit 2.0框架上传图片解决方案

程序员文章站 2024-02-23 22:34:28
本文为大家分享了 android retrofit 2.0框架上传图片解决方案,具体内容如下 1.单张图片的上传 /** * 上传一张图片...

本文为大家分享了 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 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<string> call = apimanager.uploadimage( m[0],requestbody1,requestbody2,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上传操作汇总进行学习。

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