1.用MultipartBody.Part的方式上传文件(单文件上传)(表单方式)

 @Multipart
@POST("xxx/xxx")
Call<ResponseBody> upload(@Part MultipartBody.Part part);

其中的“photos”是与服务器端预定的文件参数名

2.用RequestBody的方式上传文件(表单方式,可多上传)

 /**
* 多张图片上传
*/
private void initUpateBitmap2() { //获取图片路径,这只是个简单的例子,项目开发中会有很多图片需要上传,一般从相册和相机里获取,并且保存到后台服务器时必须自己定义名字
// ,这样就不会发生图片替换(原因名字重复)
File file = new File(Environment.getExternalStorageDirectory() + "/" + "retrofit/" + "ceshi.jpg");
File file2 = new File(Environment.getExternalStorageDirectory() + "/" + "retrofit/" + "ceshi2.jpg");
File file3 = new File(Environment.getExternalStorageDirectory() + "/" + "retrofit/" + "ceshi3.jpg");
File file4 = new File(Environment.getExternalStorageDirectory() + "/" + "retrofit/" + "ceshi4.jpg"); RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
RequestBody requestBody2 = RequestBody.create(MediaType.parse("multipart/form-data"), file2);
RequestBody requestBody3 = RequestBody.create(MediaType.parse("multipart/form-data"), file3);
RequestBody requestBody4 = RequestBody.create(MediaType.parse("multipart/form-data"), file4);
RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
//传一张图片就要增加一个参数
String name = "photo\"; filename=\"ceshi.jpg\"";
String name2 = "photo\"; filename=\"ceshi2.jpg\"";
String name3 = "photo\"; filename=\"ceshi3.jpg\"";
String name4 = "photo\"; filename=\"ceshi4.jpg\"";
HashMap<String, RequestBody> map = new HashMap<>();
map.put(name, requestBody);
map.put(name2, requestBody2);
map.put(name3, requestBody3);
map.put(name4, requestBody4); RetrofitHelper.getInstance().uploadFile2(map, new RetrofitHelper.OnSuccessListener() {
@Override
public void onSuccess(Object o) {
Log.e("", "成功");
} @Override
public void onFaile() {
Log.e("", "失败"); }
});
}

通用的带参数和文件上传

接口定义,注意这个时候没有@Multipart

 @POST("upload")
Call<ResponseBody> uploadFile(@Body RequestBody body);
 RequestBody body=new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("userName","lange")
.addFormDataPart("token","dxjdkdjkj9203kdckje0")
.addFormDataPart("header",file.getName(),fileRQ)
.build();
Call<ResponseBody> uploadCall = downloadService.uploadFile(body);

或者

 @Multipart
@POST("postFied")
Call<Void> postFied(@PartMap Map<String,String> map, @Part MultipartBody.Part file); File file=new File("/sdcard/shumei.txt");
RequestBody body=RequestBody.create(MediaType.parse("application/octet-stream"),file);
// RequestBody body=RequestBody.create(MediaType.parse("multipart/form-data"),file);
MultipartBody.Part part =MultipartBody.Part.createFormData("file",file.getName(),body);
Map<String, String> map = new HashMap<>();
map.put("name","123456");
Call<Void> liing = api.postFied(map,part);

Retrofit 2.0 上传文件的更多相关文章

  1. Servlet学习:(三)Servlet3.0 上传文件

    转: Servlet学习:(三)Servlet3.0 上传文件 2018年08月03日 11:57:58 iDark_CSDN 阅读数:362   一.注意事项 客户端(浏览器) 表单的提交方法必须是 ...

  2. 怎样解决IIS6.0上传文件限制的问题?

    我们用IIS发布的Bs项目,如果进行文件上传,在上传文件的时候,无法上传文件大小超过4M的文件 设置文件上传大小的方法,就是修改项目的web.config配置 在项目中的web.config文件中,添 ...

  3. .Net core3.0 集成swagger5.0上传文件

    .Net core 3.0已经更新了,相信有挺多博主大佬们都更新了如何在.Net core3.0使用swagger,这里就不详细说了. 我们知道,如果.net core 2.x使用swagger上传文 ...

  4. uploadify加ASP.NET MVC3.0上传文件(可多条)

    页面代码: <div id="fileQueuePlug"></div> <input type="file" name=&quo ...

  5. 使用Commons FileUpload 1.3.3和Servlet 3.0上传文件

    简介 Commons FileUpload可以轻松地为web应用程序添加强大,高性能的文件上传功能.Servlet3.0之前的web应用程序需要使用Commons FileUpload组件上传文件,但 ...

  6. 【JavaEE企业应用实战学习记录】servlet3.0上传文件

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 14:20 To change this tem ...

  7. IIS7.0上传文件限制的解决方法

    在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击. ...

  8. YII2.0上传文件

    针对于YII2.0官方手册来说,我稍微修改了一些内容具体的就是把model层里定义的uoload方法在controller方法里合并了 创建模型 namespace app\models; use y ...

  9. 「NetworkOnMainThreadException」:Android 2.3到Android 4.0上传文件的问题

    我在百度知道上的提问: 『之前我用的一段文件上传的代码,配合服务器端的servlet,实现了上传手机上的文件的功能:但是后来我把手机的Android系统从2.3升级到了4.0 ,同样的代码,同样的配置 ...

随机推荐

  1. keepalive配置mysql自动故障转移

    keepalive配置mysql自动故障转移 原创 2016年02月29日 02:16:52 2640 本文先配置了一个双master环境,互为主从,然后通过Keepalive配置了一个虚拟IP,客户 ...

  2. css选择器区别

    空格选择器 ul li 选择ul 下面的所有li 元素 大于号选择器  ul>li 选择ul 下面的直接子元素 只能是儿子辈的 不能是孙子辈的

  3. python:windows下python2.7安装mysql-python失败【转】

    转自:https://www.cnblogs.com/yujiebingqing/p/9633476.html 当我们尝试用: 1 pip install mysql-python #并不是MySQL ...

  4. Python小知识点(5)--面向对象部分

    面向对象: 世间万物,皆可分类.--------------------手机<--------------某一个分类 世间万物,皆为对象.--------------------我的手机< ...

  5. 文件服务之二:ftp协议

    FTP连接 命令连接 传输命令(客户端发给服务端的命令),服务端的21/tcp 数据连接 传输数据(传输数据时建立,数据传输完拆除) 数据链接的建立方法:主动.被动 主动模式(PORTstyle服务器 ...

  6. Git 记不住命令

    Git 记不住命令 每次用每次查 真棒 git log --stat --author=someone # git查询某个人修改记录 git log filename # fileName相关的com ...

  7. java面试题复习(六)

    51.实现多线程的方法 一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如 ...

  8. js 序列化

    Python 序列化 字符串 = json.dumps(对象)  对象转字符串 对象 = json.loads(字符串)   字符串转对象 Javascript 字符串 = JSON.stringif ...

  9. if __name__ == 'main': 的作用和原理

    if __name__ == 'main': 功能 一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行. if __na ...

  10. take it easy

    昨天魏辉在群里说,觉得自己以前很多事情做的不对,以前是个傻瓜,我说我也是这么觉得的.为什么这么说呢?因为我真的觉得以前的自己就是个SB.人的成长可能就是这样的吧,小时候的一些事情,或者是原生家庭的环境 ...