http文件上传和普通字段

Android中集成了一个apache组织提供的一个开源的访问互联网的客户端程序
HttpClient  可以使用它来发送数据
 
这里有两个方法,是往互联网传送数据时候用的
一个是传送普通文本的,一个是传送带附件的
这两个方法就可以满足我们正常的所有需求了
 
public class HttpRequester {
 
  public static String post(String actionUrl, Map<String, String> params, FormFile[] files) {
      try {          
          String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线
          String MULTIPART_FORM_DATA = "multipart/form-data";
         
          URL url = new URL(actionUrl);
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
          conn.setConnectTimeout(6* 1000);
          conn.setDoInput(true);//允许输入
          conn.setDoOutput(true);//允许输出
          conn.setUseCaches(false);//不使用Cache
          conn.setRequestMethod("POST");          
          conn.setRequestProperty("Connection", "Keep-Alive");
          conn.setRequestProperty("Charset", "UTF-8");
          conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);
 
          StringBuilder sb = new StringBuilder();
          for (Map.Entry<String, String> entry : params.entrySet()) {//构建表单字段内容
              sb.append("--");
              sb.append(BOUNDARY);
              sb.append("\r\n");
              sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");
              sb.append(entry.getValue());
              sb.append("\r\n");
          }
          DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
          outStream.write(sb.toString().getBytes());//发送表单字段数据
          for(FormFile file : files){//发送文件数据
          StringBuilder split = new StringBuilder();
              split.append("--");
              split.append(BOUNDARY);
              split.append("\r\n");
              split.append("Content-Disposition: form-data;name=\""+ file.getFormname()+"\";filename=\""+ file.getFilname() + "\"\r\n");
              split.append("Content-Type: "+ file.getContentType()+"\r\n\r\n");
              outStream.write(split.toString().getBytes());
              outStream.write(file.getData(), 0, file.getData().length);
              outStream.write("\r\n".getBytes());
          }
          byte[] end_data = ("--" + BOUNDARY + "--\r\n").getBytes();//数据结束标志       
          outStream.write(end_data);
          outStream.flush();
          int cah = conn.getResponseCode();
          if (cah != 200) throw new RuntimeException("请求url失败");
          InputStream is = conn.getInputStream();
          int ch;
          StringBuilder b = new StringBuilder();
          while( (ch = is.read()) != -1 ){
          b.append((char)ch);
          }
          Log.i("ItcastHttpPost", b.toString());         
          outStream.close();
          conn.disconnect();
          return b.toString();
      } catch (Exception e) {
       throw new RuntimeException(e);
      }
  }
 
 
  public static String post(String actionUrl, Map<String, String> params, FormFile file) {
     return post(actionUrl, params, new FormFile[]{file});
  }
 
 
  public static String post(String actionUrl, Map<String, String> params) {
        HttpPost httpPost = new HttpPost(actionUrl);
        List<NameValuePair> list = new ArrayList<NameValuePair>();
        for (Map.Entry<String, String> entry : params.entrySet()) {//构建表单字段内容
            list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
        }
        try {
         httpPost.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
         HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost);
         if(httpResponse.getStatusLine().getStatusCode() == 200){
            return EntityUtils.toString(httpResponse.getEntity());
         }
     } catch (Exception e) {
         throw new RuntimeException(e);
     }
     return null; 
    }
}
 

你可能感兴趣的:(http)