Android实现多参数文件和数据上传
程序员文章站
2022-04-12 11:43:54
本文实例为大家分享了android实现多参数文件和数据上传的具体代码,供大家参考,具体内容如下
上代码:
/**
* 可传入多张图片和参数
*
*...
本文实例为大家分享了android实现多参数文件和数据上传的具体代码,供大家参考,具体内容如下
上代码:
/** * 可传入多张图片和参数 * * @param actionurl * 发送地址 * @param params * 文本参数 * @param files * 文件参数 * @return * @throws ioexception */ public static string mulpost(string actionurl, map<string, string> params, map<string, file> files) throws ioexception { string result = ""; string boundary = java.util.uuid.randomuuid().tostring(); string prefix = "--", linend = "\r\n"; string multipart_from_data = "multipart/form-data"; string charset = "utf-8"; url uri = new url(actionurl); httpurlconnection conn = (httpurlconnection) uri.openconnection(); conn.setreadtimeout(5 * 1000); conn.setdoinput(true);// 允许输入 conn.setdooutput(true);// 允许输出 conn.setusecaches(false); conn.setrequestmethod("post"); // post方式 conn.setrequestproperty("connection", "keep-alive"); conn.setrequestproperty("charsert", "utf-8"); conn.setrequestproperty("content-type", multipart_from_data + ";boundary=" + boundary); // 首先组拼文本类型的参数 stringbuilder sb = new stringbuilder(); for (map.entry<string, string> entry : params.entryset()) { sb.append(prefix); sb.append(boundary); sb.append(linend); sb.append("content-disposition: form-data; name=\"" + entry.getkey() + "\"" + linend); sb.append("content-type: text/plain; charset=" + charset + linend); sb.append("content-transfer-encoding: 8bit" + linend); sb.append(linend); sb.append(entry.getvalue()); sb.append(linend); } dataoutputstream outstream = new dataoutputstream( conn.getoutputstream()); outstream.write(sb.tostring().getbytes()); // 发送文件数据 if (files != null) for (map.entry<string, file> file : files.entryset()) { stringbuilder sb1 = new stringbuilder(); sb1.append(prefix); sb1.append(boundary); sb1.append(linend); sb1.append("content-disposition: form-data; name=\"file\"; filename=\"" + file.getkey() + "\"" + linend); sb1.append("content-type: application/octet-stream; charset=" + charset + linend); sb1.append(linend); outstream.write(sb1.tostring().getbytes()); inputstream is = new fileinputstream(file.getvalue()); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { outstream.write(buffer, 0, len); } is.close(); outstream.write(linend.getbytes()); } // 请求结束标志 byte[] end_data = (prefix + boundary + prefix + linend).getbytes(); outstream.write(end_data); outstream.flush(); inputstream is = conn.getinputstream(); inputstreamreader isr = new inputstreamreader(is, "utf-8"); bufferedreader br = new bufferedreader(isr); result = br.readline(); outstream.close(); conn.disconnect(); return result; }
方法就是这样的。
使用时可封装在自己的类里直接调用即可,记得加网络访问和读取系统文件的权限哦。
<uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.read_external_storage" />
由于上传是耗时操作,必须得要弄在另一个线程中调用才可以。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Android Retrofit实现多图片/文件、图文上传功能
-
Android Retrofit实现多图片/文件、图文上传功能
-
结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程
-
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
-
springMVC实现单文件和多文件上传
-
springmvc代码详细(五种映射,绑定参数,处理json数据,文件上传,转发,拦截器的实现)
-
Android使用ftp方式实现文件上传和下载功能
-
PHP实现文件上传和多文件上传
-
Android实现多参数文件和数据上传
-
springboot实现表单提交数据和上传文件或图片