Map<String, String> params = new HashMap<>();
params.put("cylsh", mp4Bean.getLsh());//查验流水号
params.put("cycs", mp4Bean.getFtpdir());//查验次数
params.put("cyqxh", cyqxh);//查验区序号
params.put("spzl", mp4Bean.getId());//视频种类的ID
/*上传文件*/
File file = new File(item.getUri());
// HashMap<String, File> fileHashMap = new HashMap<>();
// fileHashMap.put("file", new File(item.getUri()));
LogUtils.v("文件名:" + new File(item.getUri()).getName());
OkHttpUtils.post().params(params)
// .files("files", fileHashMap)
.addHeader("Content-Type", " multipart/form-data")
.addFile("file", file.getName(), file)
.url(Constants.getConstants().putVideoFile()).build()
.connTimeOut(600000)//设置连接超时时间
.readTimeOut(600000)//socket连接超时时间(必须设置不然容易报错:
//java.net.SocketTimeoutException: timeout)
.execute(new StringCallback() {
/*进度的回调接口(这个需要自己重写)*/
@Override
public void inProgress(float progress, long total, int id) {
super.inProgress(progress, total, id);
LogUtils.i("进度:" + (int) (progress * 100) +
"\n总大小:" + SDUtils.getFormatSize(total));
final int result = (int) (progress * 100);
runOnUiThread(new Runnable() {
@Override
public void run() {
btn.setText(getString(R.string.loading, result, "%"));
}
});
}
@Override
public void onError(Call call, Exception e, int id) {
ProgressUtil.hide();
ToastUtils.show("视频上传失败,原因:" + e);
LogUtils.e("视频上传失败,原因:" + e);
runOnUiThread(new Runnable() {
@Override
public void run() {
btn.setText("上传失败");
}
});
}
@Override
public void onResponse(String response, int id) {
ProgressUtil.hide();
LogUtils.d("上传文件返的回数据:" + response);
DataBean dataBean = GsonUtils.fromJson(response, DataBean.class);
if ("00".equals(dataBean.getErrorCode())) {
/*上传视频文件成功*/
updateStatus(item, btn);
浏览器会自动识别并添加请求头 "Content-Type: multipart/form-data",且参数依然像是表单提交时的那种键值对儿
参考网址:https://blog.csdn.net/luhuiwan1314/article/details/79916682
public static void upLoadToServer(final Context context, HashMap<String,String >params,final String url, String filePath, final ArrayList<String> list, final HttpCallBackListener listener) {
if (NetUtils.isConnected(context)) {
Map<String, String> headers = new HashMap<>();
headers.put("Content-Disposition", "form-data;filename=enctype");
File file = new File(filePath);
if (!file.exists()) {
MyToast.showMessage("文件不存在,请修改文件路径");
return;
}
String filename = file.getName();
OkHttpUtils.post().params(params)
.headers(headers)
.addFile("mFile", filename, file)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
}
});
}
}
OkhttpUtils多文件上传,addFile中name 要变,要不只是传第一张图片后面的不传,类似Map键值存储
public PostFormBuilder addFile(String name, String filename, File file)
{
files.add(new FileInput(name, filename, file));
return this;
}
public static void upLoadToServer(final Context context, final String url, final Map<String, String> params, final ArrayList<String> list, final HttpCallBackListener listener) {
if (NetUtils.isConnected(context)) {
Map<String, String> headers = new HashMap<>();
headers.put("Content-Disposition", "form-data;filename=enctype");
PostFormBuilder builder = OkHttpUtils.post();
builder.url(url);
for (int i = 0; i < list.size(); i++) {
File file = new File(list.get(i));
if (!file.exists()) {
MyToast.showMessage("文件不存在,请修改文件路径");
return;
}
String filename = file.getName();
builder.addFile("mFile"+i, filename, file);
}
builder.params(params)
.headers(headers)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
}
});
}
}
OkHttpUtils.get(Urls.URL_METHOD) // 请求方式和请求url, get请求不需要拼接参数,支持get,post,put,delete,head,options请求
.tag(this) // 请求的 tag, 主要用于取消对应的请求
.connTimeOut(10000) // 设置当前请求的连接超时时间
.readTimeOut(10000) // 设置当前请求的读取超时时间
.writeTimeOut(10000) // 设置当前请求的写入超时时间
.cacheKey("cacheKey") // 设置当前请求的缓存key,建议每个不同功能的请求设置一个
.cacheMode(CacheMode.FIRST_CACHE_THEN_REQUEST) // 缓存模式,详细请看第四部分,缓存介绍
.setCertificates(getAssets().open("srca.cer")) // 自签名https的证书,可变参数,可以设置多个
.addInterceptor(interceptor) // 添加自定义拦截器
.headers("header1", "headerValue1") // 添加请求头参数
.headers("header2", "headerValue2") // 支持多请求头参数同时添加
.params("param1", "paramValue1") // 添加请求参数
.params("param2", "paramValue2") // 支持多请求参数同时添加
.params("file1", new File("filepath1")) // 可以添加文件上传
.params("file2", new File("filepath2")) // 支持多文件同时添加上传
.addUrlParams("key", List<String> values) //这里支持一个key传多个参数
.addFileParams("key", List<File> files) //这里支持一个key传多个文件
.addFileWrapperParams("key", List<HttpParams.FileWrapper> fileWrappers) //这里支持一个key传多个文件
.addCookie("aaa", "bbb") // 这里可以传递自己想传的Cookie
.addCookie(cookie) // 可以自己构建cookie
.addCookies(cookies) // 可以一次传递批量的cookie