普通写法:

//创建表单的普通字段
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:

未完待续...

相关链接, 这里有实现

Retrofit2 上传图片等文件的更多相关文章

  1. 用AJAX实现上传图片或者文件的方法

    大家好,我是小C,最近在项目中用到ajax上传图片文件,本篇我们就说说ajax上传文件. 我们平时用到的AJAX,大部分都是传几个参数就可以了.简单说就是传几个字符串. $.ajax({ url: u ...

  2. sau交流学习社区--在element-ui中新建FormData对象组合上传图片和文件的文件对象,同时需要携带其他参数

    今天有一个坑,同时要上传图片和文件,而且图片要展示缩略图,文件要展示列表. 我的思路是: 首先,只上传附件照片,这个直接看ele的官方例子就行,不仅仅上传附件照片,还同时上传其他参数. 然后,再做上传 ...

  3. flask上传图片或者文件

    在flask unittest自动化测试中如何上传图片或者文件 import StringIO picture = StringIO.StringIO(open('/home/admin/Pictur ...

  4. ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)

    我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...

  5. php无刷新上传图片和文件

    核心思想:通过Html的iframe标签属性操作顶级窗口,再用php动态无刷新上传图片文件. 示例如下: demo |------uploads #存放上传的文件 |------index.php | ...

  6. 关于Asp.Net Mvc3.0 使用KindEditor4.0 上传图片与文件

    http://blog.csdn.net/fyxq14hao/article/details/7245502 今天我们的Asp.Net Mvc 3的项目中,把KindEditor3.9改为 KindE ...

  7. Ueditor 1.4.3 单独调用上传图片,或文件功能

    第一步, 引入文件 <script src="ueditor/ueditor.config.js" type="text/javascript" char ...

  8. yii中上传图片及文件

    Yii 提供了 CUploadedFile 来上传文件,比如图片,或者文档. 官方关于这个类的介绍 : http://www.yiichina.com/api/CUploadedFile CUploa ...

  9. 在.net MVC中异步上传图片或者文件

      @using (Ajax.BeginForm("AddMessages", "MenuInfo", new AjaxOptions { HttpMethod ...

随机推荐

  1. C++中的随机数函数(

    标签:ul 随机数 c 整数 max 教育  C++中产生随机数种子对于刚開始学习的人一直都非常困惑.大家知道,在C中有专门的srand(N)函数能够轻松实现这一功能,然而在C++中则要复杂一些.以下 ...

  2. PS学习

    PS快捷键大全(转自UI中国PS教程) 摆脱鼠标流就靠这张图了!!!! 查看图像 使用导航器查看图像 选择窗口-->导航器 菜单命令 使用缩放工具查看图像 ctrl++ 以画布大小放大图像 ct ...

  3. JavaScript引用类型之Array数组的排序方法

    数组中已经存在两个JavaScript给我们定义好的重排序的方法:reverse()和sort()方法,下面来简单分析下: 1.reverse()    用于反转数组项的顺序,代码如下: <sc ...

  4. 腾讯TGideas语义化标签(转)

    --------引子--------------- 家里有个熊孩子,经常会有一些意想不到的事情发生:回家的时候,他会笑呵呵冲过来,大声喊着“臭爸爸”:你让他把鞋穿上,他会提起鞋子往楼下扔...在小孩的 ...

  5. powerdesigner反向MySQL5.1数据库 生成ER图

    我用的powerdesigner是15.1版本,数据库是MySQL5.1.57 (1)首先新建一个“PhysicalDataModel”类型的文件,然后点击“Database”->"C ...

  6. JDK源码学习--String篇(三) 存储篇

    在进一步解读String类时,先了解下内存分配和数据存储的. 数据存储 1.寄存器:最快的存储区,位于处理器的内部.由于寄存器的数量有限,所以寄存器是按需分配. 2.堆栈:位于RAM中,但是通过堆栈指 ...

  7. Scala io操作

    1. 读文件 scala特有的是scala.io.Source,例如: import scala.io._ Source.fromFile(“cn.scala”,”utf8”).mkString 逐行 ...

  8. C++_知识点_指针类型转换

    #include <iostream> using namespace std; int main(){ ] = {, , , , , , , , , }; int* p = (int*) ...

  9. SSL是啥?

    SSL(Secure Socket Layer) 的主要作用是验证客户端与服务器的有效性,并在数据传输前,就进行加密,避免在传输过程中被窃取,同时亦可保证数据的完整性,确保数据在传输过程中不被篡改,以 ...

  10. 解析ECC与RECC内存之间的区分

    普通的定义上区分:内存,是连接CPU 和其他设备的通道,起到缓冲和数据交换作用.当CPU在工作时,需要从硬盘等外部存储器上读取数据,但由于硬盘这个“仓库”太大,加上离CPU也很“远”,运输“原料”数据 ...