首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android客户端如何把图片post给php服务端

2013-01-19 
android客户端怎么把图片post给php服务端?其他的都是键值对形式post,可是图像怎么办呢?转换成byte[]好像也

android客户端怎么把图片post给php服务端?
其他的都是键值对形式post,可是图像怎么办呢?转换成byte[]好像也不能传
[解决办法]

public static String post(String actionUrl, Map<String, String> params, 
    Map<String, File> files) throws IOException { 
  StringBuilder sb2 = new StringBuilder(); 
  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-Disposition: form-data; name="userupfile"; 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; 
    
    while ((ch = in.read()) != -1) { 
      sb2.append((char) ch); 
    } 
    Log.i("CAMERA", sb2.toString());
  }
  
  return in == null ? null : sb2.toString(); 
}


[解决办法]
Uri uri = data.getData();

String[] proj = { MediaStore.Images.Media.DATA };

Cursor actualimagecursor = managedQuery(uri,proj,null,null,null);

int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

actualimagecursor.moveToFirst();

String img_path = actualimagecursor.getString(actual_image_column_index);

File file = new File(img_path);

热点排行