普通写法:

//创建表单的普通字段
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. SDN 编程语言 p4(SDN programming language P4)

    行业趋势,SND是未来. P4 是未来. SDN is inevitably, and P4 is inevitably. P4 = Programming Protocol-Independent ...

  2. append与after

    apend与apendTo就如同after与insertAfter,表达意思相同,表达不同.A.after(B)=B.insertAfter(A).apend在元素里面添加,after在元素外面添加. ...

  3. mongodb的 或 查询,实践总结

    PostcardRecord.findOne({user:userid, $or : [ { at:{$gte:start.valueOf(), $lte:end.valueOf()} } , { i ...

  4. python-大话装饰器

    装饰器 装饰器是个什么玩意呢?是个会了不难,装逼神器.但是如果不了解理解起来还是很抽象,让我们试试这个装逼神器吧! 1.什么是装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典 ...

  5. php导出CSV时,超长数字精度丢失问题与前导0的字符串丢失0的问题解决

    php生成的CSV有时候会遇到两个特殊情况: 1.输出的字段中,含有超长数字(18位的数字)比方身份证:122121197410180016,就算输出时字段加上"",还是会被识别成 ...

  6. 如何解决innnerText的兼容性问题

    //获dom对象的innerText的取值 function getInnerText(element) { //判断当前浏览器是否支持innerText if(typeof element.inne ...

  7. KVC中setValuesForKeysWithDictionary:

    本文转载于:http://my.oschina.net/u/2407613/blog/524879?p={{page}} 从字典映射到一个对象,这是KVC中的一个方法所提供的,这个方法就是 setVa ...

  8. Oracle包的概念

    转自:http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答: 在一个大型项目中,可 ...

  9. C/C++中使用的正则表达式库

    正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则引擎主要可以分 ...

  10. jQuery 插件入门

    先看http://www.cnblogs.com/lideng/p/3605551.html http://www.cnblogs.com/xcj26/p/3345556.html (非常细致  很多 ...