Retrofit2 上传图片等文件
普通写法:
//创建表单的普通字段
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 上传图片等文件的更多相关文章
- 用AJAX实现上传图片或者文件的方法
大家好,我是小C,最近在项目中用到ajax上传图片文件,本篇我们就说说ajax上传文件. 我们平时用到的AJAX,大部分都是传几个参数就可以了.简单说就是传几个字符串. $.ajax({ url: u ...
- sau交流学习社区--在element-ui中新建FormData对象组合上传图片和文件的文件对象,同时需要携带其他参数
今天有一个坑,同时要上传图片和文件,而且图片要展示缩略图,文件要展示列表. 我的思路是: 首先,只上传附件照片,这个直接看ele的官方例子就行,不仅仅上传附件照片,还同时上传其他参数. 然后,再做上传 ...
- flask上传图片或者文件
在flask unittest自动化测试中如何上传图片或者文件 import StringIO picture = StringIO.StringIO(open('/home/admin/Pictur ...
- ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...
- php无刷新上传图片和文件
核心思想:通过Html的iframe标签属性操作顶级窗口,再用php动态无刷新上传图片文件. 示例如下: demo |------uploads #存放上传的文件 |------index.php | ...
- 关于Asp.Net Mvc3.0 使用KindEditor4.0 上传图片与文件
http://blog.csdn.net/fyxq14hao/article/details/7245502 今天我们的Asp.Net Mvc 3的项目中,把KindEditor3.9改为 KindE ...
- Ueditor 1.4.3 单独调用上传图片,或文件功能
第一步, 引入文件 <script src="ueditor/ueditor.config.js" type="text/javascript" char ...
- yii中上传图片及文件
Yii 提供了 CUploadedFile 来上传文件,比如图片,或者文档. 官方关于这个类的介绍 : http://www.yiichina.com/api/CUploadedFile CUploa ...
- 在.net MVC中异步上传图片或者文件
@using (Ajax.BeginForm("AddMessages", "MenuInfo", new AjaxOptions { HttpMethod ...
随机推荐
- 从麦肯锡到小黑裙-Project Gravitas |华丽志
从麦肯锡到小黑裙-Project Gravitas |华丽志 从麦肯锡到小黑裙-Project Gravitas
- 关于使用WKWebViewJavascriptBridge报错的问题
Error message: Undefined symbols for architecture arm64: "_OBJC_CLASS_$_WKWebViewJavascriptBrid ...
- POJ 1077 HDU 1043 Eight (IDA*)
题意就不用再说明了吧......如此经典 之前想用双向广搜.a*来写,但总觉得无力,现在用IDA*感觉其他的解法都弱爆了..............想法活跃,时间,空间消耗很小,给它跪了 启发式搜索关 ...
- 初窥C++11:自己主动类型推导与类型获取
auto 话说C语言还处于K&R时代,也有auto a = 1;的写法.中文译过来叫自己主动变量.跟c++11的不同.C语言的auto a = 1;相当与 auto int a = 1;语句. ...
- [转] C#.Net Socket网络通讯编程总结
1.理解socket1).Socket接口是TCP/IP网络的应用程序接口(API).Socket接口定义了许多函数和例程,程序员可以用它们来开发TCP/IP网络应用程序.Socket可以看成是网络通 ...
- 个人笔记mysql游标
经过测试,mysql游标是无法读取自定义函数计算的结构,mysql自带的函数计算值是可以读取的.
- C#学习日志 day 5 ------ windows phone 8.1真机调试手机应用
在vs2013中,可以写windows phone 8.1的程序,但是调试时需要用到windows自带的虚拟机hyper-V 正版的系统开启hyper—V的时候不会有问题,但是盗版的系统可能导致系统不 ...
- Ext Store Proxy Ajax
使用Store ajax的方式来获取数据 <div id="grid1"> </div> <script> Ext.onReady(functi ...
- java核心技术学习笔记之三程序设计结构
一 基本数据结构 必须包括在类中 必须具备 public static main方法 大小写敏感 二.数据类型 四种整数类型: Int 4字节 short 2字节 long8字节 byte1字节 二种 ...
- 7_Table Views
7 // // ViewController.swift // Table Views // // Created by ZC on 16/1/9. // Copyright © 2016年 ZC. ...