(android功能代码) android文件上传服务器

你猜 阅读:622 2021-04-01 10:19:13 评论:0
/** 
 * 通过拼接的方式构造请求内容,实现参数传输以及文件传输 
 * @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();  
 }

标签:Android
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号