1.单个文件
//接口
@Multipart
@POST(ApiConstant.FILE_UPLOAD)
Call<BaseResponse<String>> fileUpload(@Part MultipartBody.Part file);
//构建要上传的文件
File file = new File(androidQToPath);
MultipartBody.Part part = RequestFileUtil.uploadFile("file",file);
2.多个文件
RequestFileUtil工具类:
package com.mbzj.ykt_student.utils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
/**
* @author David
* @description: 上传文件帮助工具
* @date :2020/8/10 19:17
*/
public class RequestFileUtil {
/**
* 上传单个文件
* @param fileName
* @param file 为参数字段名
* @return
*/
public static MultipartBody.Part uploadFile(String fileName,File file){
// RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data;charset=UTF-8"), file); 过时
RequestBody requestBody = getRequestBody(file);
MultipartBody.Part part = MultipartBody.Part.createFormData(fileName, file.getName(), requestBody);
return part;
}
public static RequestBody getRequestBody(File file){
MediaType mediaType=MediaType.Companion.parse("text/x-markdown; charset=utf-8");
RequestBody fileBody=RequestBody.Companion.create(file,mediaType);
return fileBody;
}
/**
* 上传多个文件
* @param files
* @return
*/
public static List<MultipartBody.Part> filesToMultipartBodyParts(List<File> files) {
List<MultipartBody.Part> parts = new ArrayList<>(files.size());
for (File file : files) {
// RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data;charset=UTF-8"), file);
RequestBody requestBody = getRequestBody(file);
MultipartBody.Part part = MultipartBody.Part.createFormData("multipartFiles", file.getName(), requestBody);
parts.add(part);
}
return parts;
}
/**
* 请求参数转化为RequestBody
* @param value
* @return
*/
public static RequestBody toRequestBody(String value) {
// RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), value);
MediaType mediaType=MediaType.Companion.parse("application/json;charset=utf-8");
RequestBody requestBody = RequestBody.Companion.create(value,mediaType);
return requestBody;
}
}
a.文件加文字
第一种:亲自测试可以,服务端使用form-data方式
//接口
@POST(ApiConstant.QUESTION_PUBLISH)
Call<BaseResponse> publishQuestion(@Body RequestBody Body);
MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("subjectId", publishQuestionBody.getSubjectId())
.addFormDataPart("content", publishQuestionBody.getContent())
.addFormDataPart("teacherUserId",publishQuestionBody.getTeacherUserId());
//音频
if (!TextUtils.isEmpty(publishQuestionBody.getAudioUrl())){
builder.addFormDataPart("audioDuration", publishQuestionBody.getAudioDuration()+"");
File file = new File(publishQuestionBody.getAudioUrl());
builder.addFormDataPart("audioFile",file.getName(), RequestFileUtil.getRequestBody(file));
}
//图片
for (String imgPath : publishQuestionBody.getImages()) {
File file = new File(imgPath);
builder.addFormDataPart("imageFileList",file.getName(),RequestFileUtil.getRequestBody(file));
}
RequestBody Body = builder.build();
第二种:亲测不行,不清楚原因(待完善)
//接口
@Multipart
@POST(ApiConstant.QUESTION_PUBLISH)
Call<BaseResponse> publishQuestion(@PartMap Map<String, RequestBody> params);
Map<String, RequestBody> params=new HashMap<>();
params.put("subjectId",RequestFileUtil.toRequestBody(publishQuestionBody.getSubjectId()));
params.put("content",RequestFileUtil.toRequestBody(publishQuestionBody.getContent()));
params.put("teacherUserId",RequestFileUtil.toRequestBody(publishQuestionBody.getTeacherUserId()));
//音频
if (!TextUtils.isEmpty(publishQuestionBody.getAudioUrl())){
params.put("audioDuration", RequestFileUtil.toRequestBody(publishQuestionBody.getAudioDuration() + ""));
params.put("audioFile", RequestFileUtil.getRequestBody(new File(publishQuestionBody.getAudioUrl())));
}
//图片
// if (publishQuestionBody.getImages().size()>0){
// params.put("imageFileList",RequestFileUtil.filesToMultipartBodyParts(new File()));
// }
for (String imgPath : publishQuestionBody.getImages()) {
params.put("imageFileList",RequestFileUtil.getRequestBody(new File(imgPath)));
}
网友评论