<address id="jv157"></address>
<sub id="jv157"></sub>

      <address id="jv157"></address>

      <thead id="jv157"></thead>

        android文件上传到服务器

        /**
        * 通过拼接的方式构造请求内容,实现参数传输以及文件传输
        * @param actionUrl
        * @param params
        * @param files
        * @return
        * @throws IOException
        */
        public static String post(String actionUrl, Map<String, String> params,
            Map<String, File> files) throws IOException {

          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");
          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){
            int i = 0;
            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"+(i++)+"\"; 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();

          //得到响应码
          int res = conn.getResponseCode();
          InputStream in = null;
          if (res == 200) {
            in = conn.getInputStream();
            int ch;
            StringBuilder sb2 = new StringBuilder();
            while ((ch = in.read()) != -1) {
              sb2.append((char) ch);
            }
          }
          return in == null ? null : in.toString();
        }



        最简单的PHP测试代码:

        if($_FILES){
          foreach($_FILES as $v){
            copy($v[tmp_name], $v[name]);
          }
        }



        参考自 Android中发送Http请求实例(包括文件上传、servlet接收) ,修复了几个问题:
        1 多文件上传 file"+(i++)+"
        2 返回的错误

        另外还可以看看这个(我没测试) android 文件上传的类--完整 可以直接被调用的

        这有一个从协议上分析的,比较牛叉:Android下的应用编程——用HTTP协议实现文件上传功能

        原创内容如转载请注明:来自 阿权的书房 <script> //&lt;![cdata[ document.write(&quot;&lt;br /&gt;本帖地址:&lt;a href=\&quot;&quot;+window.location+&quot;\&quot;&gt;&quot;+window.location+&quot;&lt;/a&gt;&quot;); //]]&gt; </script>
        本帖地址:http://www.aslibra.com/blog/post/android-upload-files-to-server.php

         

        http 上传文件的方法

        1. 1/** 
        2.   2.          * 
        3.   3.          * sendMultipartDataToHttpServer 
        4.   4.          * 使用post方法请求web服务器,并且当表单数据为:multipart/form-data格式。http请求使用{@link#HTTP_ENCODING}编码<br/> 
        5.   5.          * 返回json数据,支持文件名中文上传和多文件上传,不支持断点上传,要正确编码服务端返回{@link#HTTP_ENCODING}编码<br/> 
        6.   6.          * @param url 
        7.   7.          * @param files 文件表单域 
        8.   8.          * @param fields 非文件表单域 
        9.   9.          * @return JSONObject 
        10.  10.          * @throws Exception 
        11.  11.          * @exception 
        12.  12.          * @since  1.0.0 
        13.  13.          */  
        14.  14.         public static JSONObject sendMultipartDataToHttpServer(URL url,  
        15.  15.                         final Map<String, File> files, final Map<String, String> fields,  
        16.  16.                         final UsernamePasswordCredentials credentials) throws IOException ,JSONException,Exception{  
        17.  17.                 URL myurl = null;  
        18.  18.                 String queryString = "";  
        19.  19.                 // 其他的表单域  
        20.  20.                 if (fields != null) {  
        21.  21.                         for (Map.Entry<String, String> entry : fields.entrySet()) {  
        22.  22.                                 queryString += "&" + URLEncoder.encode(entry.getKey(),HTTP_ENCODING) + "="  
        23.  23.                                                 + URLEncoder.encode(entry.getValue(), HTTP_ENCODING);  
        24.  24.                         }  
        25.  25.                 }  
        26.  26.                 if (!queryString.equals("")) {  
        27.  27.                         queryString = queryString.replaceFirst("&""?");  
        28.  28.                 } else {  
        29.  29.                 }  
        30.  30.  
        31.   
        32.  31.                 myurl = new URL(url.getProtocol(), url.getHost(),url.getPort(), url.getPath()  
        33.  32.                                 + queryString);  
        34.  33.                 HttpURLConnection conn = (HttpURLConnection) myurl.openConnection();  
        35.  34.                 conn.setConnectTimeout(UPLOAD_REQUEST_TIMEOUT);  
        36.  35.                 conn.setRequestMethod(HTTP_METHOD.POST.toString());  
        37.  36.                 conn.setDoInput(true);  
        38.  37.                 conn.setDoOutput(true);  
        39.  38.                 conn.setUseCaches(false);  
        40.  39.  
        41.   
        42.  40.                 String boundary = "laohuidi_" + java.util.UUID.randomUUID().toString()  
        43.  41.                                 + "_laohuidi";  
        44.  42.                 conn.setRequestProperty(  
        45.  43.                                                 "Accept",  
        46.  44.                                                 "image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,application/x-shockwave-flash,application/x-quickviewplus,*/*");  
        47.  45.                 conn.setRequestProperty("keep-alive""300");  
        48.  46.                 conn.setRequestProperty(  
        49.  47.                                                 "user-agent",  
        50.  48.                                                 "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6");  
        51.  49.                 conn.setRequestProperty("accept-language""zh-cn,zh;q=0.5");  
        52.  50.                 conn.setRequestProperty("Connection""Keep-Alive");  
        53.  51.                 conn.setRequestProperty("Content-Type""multipart/form-data;boundary="+ boundary);  
        54.  52.  
        55.   
        56.  53.                 DataOutputStream dos = new DataOutputStream(conn.getOutputStream());  
        57.  54.                 // 乱码问题 可以试下 PrintWriter out = new PrintWriter(new  
        58.  55.                 // OutputStreamWriter(connection.getOutputStream(),"utf-8"));  
        59.  56.                 dos = new DataOutputStream(conn.getOutputStream());  
        60.  57.                 int bytesRead, bytesAvailable, bufferSize;  
        61.  58.                 byte[] buffer;  
        62.  59.                 int maxBufferSize = IO_BUFFER_SIZE;  
        63.  60.                 String tem = "";  
        64.  61.                 if(files!=null)  
        65.  62.                 for (Map.Entry<String, File> entry : files.entrySet()){  
        66.  63.                         // 分隔符开头  
        67.  64.                         dos.writeBytes(TWO_HYPHENS + boundary + LINEND);  
        68.  65.                         // create a buffer of maximum size  
        69.  66.                         FileInputStream fileInputStream = new FileInputStream(entry.getValue());  
        70.  67.                         bytesAvailable = fileInputStream.available();  
        71.  68.                         bufferSize = Math.min(bytesAvailable, maxBufferSize);  
        72.  69.                         buffer = new byte[bufferSize];  
        73.  70.                         // read file and write it into form...  
        74.  71.                         bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
        75.  72.                         tem = entry.getValue().getName();  
        76.  73.                         dos.writeBytes("Content-Disposition:form-data;name=\""+entry.getKey()+"\";""filename=\"");  
        77.  74.                         dos.writeUTF(tem);// 中文的文件名使用这里  
        78.  75.                         dos.writeBytes("\"" + LINEND);  
        79.  76.                         dos.writeBytes("Content-Type:image/jpg" + LINEND + LINEND);//类型的判断暂时不处理  
        80.  77.                         while (bytesRead > 0) {  
        81.  78.                                 dos.write(buffer, 0, bufferSize);  
        82.  79.                                 bytesAvailable = fileInputStream.available();  
        83.  80.                                 bufferSize = Math.min(bytesAvailable, maxBufferSize);  
        84.  81.                                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
        85.  82.                         }  
        86.  83.                         // close streams  
        87.  84.                         fileInputStream.close();  
        88.  85.                         dos.writeBytes(LINEND);  
        89.  86.                 }  
        90.  87.                 // http 结束符  
        91.  88.                 dos.writeBytes(TWO_HYPHENS + boundary + TWO_HYPHENS);  
        92.  89.                 dos.writeBytes(LINEND);  
        93.  90.  
        94.   
        95.  91.                 dos.flush();  
        96.  92.                 dos.close();  
        97.  93.                 // 返回类型  
        98.  94.                 String responseType = conn.getHeaderField("Content-Type");  
        99.  95.                 // 正常返回而且必须为json类型  
        100.  96.                 if (conn.getResponseCode() == HttpURLConnection.HTTP_OK  
        101.  97.                                 && responseType != null  
        102.  98.                                 && responseType.indexOf(HTTP_JSON_TYPE) >= 0) {  
        103.  99.                         responseType = (convertStreamToString(conn.getInputStream()));  
        104. 100.  
        105.   
        106. 101.                 } else {  
        107. 102.                         responseType = "{}";  
        108. 103.                 }  
        109. 104.                 try{conn.disconnect();}catch(Exception e){}  
        110. 105.                 return new JSONObject(responseType);  
        111. 106.         } 
        相关文章
        相关标签/搜索
        2020年正版综合资料 定安县| 孟村| 临猗县| 鄂伦春自治旗| 东台市| 容城县| 蓬莱市| 昭觉县| 巴中市| 曲靖市| 德令哈市| 阜新市| 留坝县| 施甸县| 翁源县| 张家口市| 永靖县| 焦作市| 江达县| 江油市| 韩城市| 博湖县| 喀什市| 察雅县| 蒙自县| 乐平市| 柏乡县| 东乡县| 万载县| 宜章县| 林芝县| 河津市| 永兴县| 昭苏县| 武陟县| 涿州市| 保靖县| 镇赉县| 长治县| 龙南县| 宝坻区| 怀仁县| 弥勒县| 乐清市| 无为县| 淮南市| 梨树县| 永平县| 焉耆| 昆山市| 八宿县| 浠水县| 高淳县| 会泽县| 伽师县| 盐山县| 龙岩市| 志丹县| 迁西县| 东台市| 永德县| 新龙县| 始兴县| 繁昌县| 邳州市| 兴和县| 辰溪县| 皮山县| 抚远县| 丹江口市| 乾安县| 永修县| 邳州市| 育儿| 临海市| 大同县| 南岸区| 太湖县| 碌曲县| 光泽县| 儋州市| 会泽县| 若羌县| 密山市| 桐城市| 武功县| 响水县| 瓦房店市| 万盛区| 平果县| 奉新县| 太仆寺旗| 深泽县| 耒阳市| 陵川县| 永定县| 中山市| 金昌市| 客服| 望城县| 文登市| 青浦区| 玛沁县| 张北县| 青神县| 荔浦县| 监利县| 宝鸡市| 克山县| 渭源县| 汝城县| 温泉县| 银川市| 玛曲县| 眉山市| 阳山县| 德惠市| 云南省| 桂东县| 柯坪县| 辉县市| 鄂托克前旗| 永靖县| 紫阳县| 庄河市| 临海市| 贵港市| 凤凰县| 岱山县| 廊坊市| 石景山区| 泰安市| 迁西县| 东平县| 饶平县| 莎车县| 廊坊市| 庆安县| 扶余县| 卢氏县| 随州市| 昌宁县| 绥江县| 远安县| 鸡东县| 隆回县| 棋牌| 尼勒克县| 克山县| 开阳县| 深水埗区| 敦化市| 南川市| 华坪县| 澄迈县| 镇巴县| 淅川县| 包头市| 宾川县| 鄢陵县| 专栏| 车致| 霍城县| 仪征市| 钦州市| 抚顺县| 德兴市| 威海市| 梧州市| 麟游县| 玉门市| 长垣县| 米泉市| 太康县| 桓仁| 南溪县| 长宁区| 天柱县| 清徐县| 罗江县| 修文县| 石嘴山市| 通江县| 蒙自县| 昌都县| 当雄县| 神农架林区| 红安县| 赣州市| 富川| 娄烦县| 浪卡子县| 察雅县| 长治市| 丰县| 略阳县| 巍山| 井冈山市| 兴和县| 卢龙县| 斗六市| 深泽县| 镇坪县| 昌乐县| 桓台县| 松溪县| 剑河县| 文安县| 河池市| 天全县| 道真| 南充市| 资源县| 临沭县| 高淳县| 怀宁县| 潜江市| 泰宁县| 二手房| 射洪县| 调兵山市| 阿拉善左旗| 晋宁县| 定襄县| 邳州市| 柘城县| 丰都县| 定结县| 苏尼特左旗| 乐安县| 兴安盟| 耿马| 东山县| 阜宁县| 曲松县| 舞阳县| 武强县| 峨眉山市| 昭平县| 华宁县| 吴江市| 蓝田县| 平山县| 道真| 郯城县| 阿尔山市| 突泉县| 维西| 嵊泗县| 西吉县| 西林县| 三门县| 旺苍县| 曲阳县| 新昌县| 肥西县| 井研县| 乡城县| 共和县| 广宗县| 东城区| 前郭尔| 米易县| 竹溪县| 庆安县| 南江县| 宝山区| 花莲县| 沅江市| 永胜县| 威宁| 梁河县| 达拉特旗| 酉阳| 治县。| 临武县| 新干县| 民和| 子长县| 获嘉县| 娱乐| 乌拉特后旗| 墨江| 石柱| 城步| 赞皇县| 和田市| 织金县| 商洛市| 璧山县| 岑溪市| 宜黄县| 航空| 榆社县| 皮山县| 沙洋县| 阿合奇县| 和政县| 四平市| 黑河市| 桃源县| 富平县| 长顺县| 达日县| 家居| 屏南县| 揭阳市| 绥化市| 金山区| 石阡县| 麻城市| 富源县| 淮南市| 惠来县| 西乌| 玉树县| 长春市| 尤溪县| 宁海县| 柘城县| 连城县| 安溪县| 白山市| 大港区| 富顺县| 梨树县| 南溪县| 延川县| 井陉县| 汝阳县| 西乡县| 青铜峡市| 武宣县| 南部县| 吴旗县| 西吉县| 雅江县| 建始县| 临泉县| 武强县| 确山县| 甘孜| 特克斯县| 和顺县| 安远县| 沂南县| 宁南县| 湖南省| 迭部县| 和静县| 江川县| 怀宁县| 潜江市| 松原市| 博乐市| 新干县| 乌兰浩特市| 贵德县| 永泰县| 西华县| 修文县| 仪陇县| 宁陕县| 兴海县| 泽普县| 澜沧| 百色市| 布尔津县| 桂阳县| 白沙| 金门县| 西宁市| 金溪县| 汤原县| 泸溪县| 正定县| 兰溪市| 新田县| 繁昌县| 宿松县| 东城区| 石河子市| 涟源市| 蚌埠市| 正蓝旗| 岐山县| 南汇区| 凭祥市| 邮箱| 汽车| 巴彦县| 皮山县| 阜城县| 昭苏县| 和硕县| 南充市| 巫溪县| 抚顺市| 中西区| 渭源县| 耒阳市| 福清市| 嘉兴市| 灯塔市| 泗洪县| 黄冈市| 军事| 微博| 青海省| 抚顺市| 横峰县| 高密市| 乐业县| 岳阳县| 射洪县| 郯城县| 利津县| 翼城县| 永善县| 临清市| 彭水| 兰溪市| 崇左市| 姜堰市| 密山市| 将乐县| 莱州市| 抚顺市| 金塔县| 河北省| 武清区| 蓝山县| 牡丹江市| 凤冈县| 靖江市| 青铜峡市| 南陵县| 白水县| 南和县| 崇义县| 望江县| 七台河市| 伊金霍洛旗| 桂阳县| 连平县| 宁远县| 承德市| 高清| 三门峡市| 灵寿县| 潢川县| 巍山| 建阳市| 青州市| 台江县| 中西区| 秦安县| 大兴区| 聂拉木县| 泾阳县| 阿坝县| 宝山区| 沙坪坝区| 五寨县| 吉安市| 格尔木市| 海林市| 和平县| 化德县| 郓城县| 峨眉山市| 青海省| 额尔古纳市| 彭州市| 辰溪县| 怀化市| 衡阳市| 兰考县| 宽甸| 松溪县| 图木舒克市| 保定市| 内乡县| 安西县| 怀宁县| 内乡县| 苍溪县| 达孜县| 改则县| 康马县| 白河县| 加查县| 平江县| 张北县| 师宗县| 长岛县| 乌拉特中旗| 银川市| 鄱阳县| 府谷县| 新绛县| 滨海县| 扶绥县| 岳池县| 夹江县| 凤庆县| 五家渠市| 关岭| 神农架林区| 永福县| 绩溪县| 禄劝| 亳州市| 治多县| 汝州市| 泾川县| 德清县| 巫山县| 酒泉市| 陇西县| 台东市| 罗平县| 济源市| 光山县| 离岛区| 定安县| 婺源县| 平潭县| 延安市| 荆门市| 鹿泉市| 勃利县| 寿宁县| 潼南县| 青阳县| 万载县| 湘乡市| 威远县| 淅川县| 丰城市| 丽水市| 临猗县| 东乡| 黄冈市| 汪清县| 手游| 寻乌县| 梧州市| 马边| 藁城市| 余江县| 方城县| 岑溪市| 灵川县| 得荣县| 汶上县| 罗源县| 图们市| 靖江市| 丰宁| 招远市| 玉田县| 城口县| 二连浩特市| 扎囊县| 容城县| 松溪县| 漯河市| 资源县| 阿坝县| 梁平县| 博爱县| 蒙山县| 黄骅市| 永登县| 曲阳县| 南充市| 延寿县| 仁布县| 阿拉善右旗| 长葛市| 博白县| 都昌县| 乐陵市| 开封市| 宜都市| 商都县| 洪洞县| 拜泉县| 乾安县| 阿拉尔市| 长白| 冷水江市| 梅河口市| 英超| 井冈山市| 麻阳| 肃宁县| 大庆市| 张家川| 洛南县| 黄大仙区| 巩留县| 金昌市| 维西| 平利县| 长垣县| 永嘉县| 文安县| 志丹县| 绥宁县| 新营市| 德格县| 西青区| 石首市| http://www.jx1870holev.fun http://wap.jx1870focusv.fun http://m.jx1870eyev.fun http://www.hz0j2r9vo.fun http://wap.jx1870horsev.fun http://wap.jx1870guidev.fun http://www.jx1870glassv.fun http://m.jx1870forestv.fun http://www.jx1870havev.fun http://m.jx1870findv.fun http://jx1870feelv.fun http://www.jx1870guessv.fun http://m.jx1870hidev.fun http://wap.jx1870killv.fun http://wap.jx1870icev.fun http://jx1870heatv.fun http://hz0j2r9vo.fun http://jx1870grantv.fun