retrofit 上传文件, 新方式 传的是数组 或者文件
接口 新的写法
@POST(Urls.fauth)
public Call fAuth(@Body MultipartBody multipartBody);
构造MultipartBody
public void fLoginPost(final Context context, String grantType, String userName, String delta, byte[] imageBest, byte[] imageEnv,
String scope) {
final AuthLoginNetInf authLoginNetInf = new ISRestAdapter
(context, BuildConfig.API_URL, AuthLoginNetInf.class).create();
if (null == authLoginNetInf) {
handleResult(R.string.network_error);
return;
}
MultipartBody.Part bestPart = MultipartBody.Part.
createFormData("faces", imageBest.length + "", RequestBody.create(_PNG, imageBest));
MultipartBody.Part envPart = MultipartBody.Part.
createFormData("faces", imageEnv.length + "", RequestBody.create(_PNG, imageEnv));
MultipartBody.Part deltaPart = MultipartBody.Part.
createFormData("params", null, RequestBody.create(_PLAIN, delta));
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MultipartBody.FORM);
builder.addFormDataPart("grant_type", grantType);
builder.addFormDataPart("username", userName);
builder.addFormDataPart("scope", scope);
builder.addPart(deltaPart);
builder.addPart(bestPart);
builder.addPart(envPart);
MultipartBody multipartBody = builder.build();
Call call = authLoginNetInf.fAuth(multipartBody);
构造 MediaType
private static final MediaType _PLAIN = MediaType.parse(“text/plain”);
private static final MediaType _PNG = MediaType.parse(“image/png”);
faces && params 是数组 ,所以用MultipartBody.Part,如果是文本 就是可以使用addFormDataPart(“key”,value);
MultipartBody.Part.createFormData(“key”,filename,RequestBody) filename 可为空,如果为空,就相当于addFormDataPart(“key”,value);
//创建Multipart, fieldName为表单字段名
public static MultipartBody.Part createFilePart(String fieldName, File file) {
RequestBody requestFile = RequestBody.create(MediaType.parse(“multipart/form-data”), file);
MultipartBody.Part body = MultipartBody.Part.createFormData(fieldName, file.getName(), requestFile);
return body;
}
//创建表单的普通字段
public static RequestBody createFormBody(String content) {
RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), content);
return body;
}