Android 에서 Http 요청 인 스 턴 스 보 내기

Android 에서 Http 요청 인 스 턴 스(파일 업로드,servlet 수신 포함)http,post 를 보 냅 니 다.파일 을 올 리 는 이 게시 물 은 마지막 으로 xinke7hao 가 2010-6-12 13:43 편집 그저께 부터 핸드폰 에서 서버 로 파 라 메 터 를 전송 할 준 비 를 해 야 합 니 다.첨부 파일 도 전송 할 수 있 고 많은 글 과 자 료 를 찾 았 습 니 다.이제 공유:코드 중의 catch 같은 것 을 정리 하면 생략 합 니 다.그림,txt,xml 를 시도 해 보 았 습 니 다.여러분 벽돌 을 마음껏 찍 으 세 요.보 내 고 보 니 코드 부분의 형식 이...................................................................................
/** 
*   http          ,        ,       
* @param actionUrl      
* @param params      key    ,value     
* @param file      
*/ 
public static void postMultiParams(String actionUrl, Map<String, String> params, FormBean[] files) { 
try { 
PostMethod post = new PostMethod(actionUrl); 
List<art> formParams = new ArrayList<art>(); 
for(Map.Entry<String, String> entry : params.entrySet()){ 
formParams.add(new StringPart(entry.getKey(), entry.getValue())); 
} 

if(files!=null) 
for(FormBean file : files){ 
//filename                 ,filepath       (       ),filebean          
formParams.add(new FilePart("file", file.getFilename(), new File(file.getFilepath()))); 
} 

Part[] parts = new Part[formParams.size()]; 
Iterator<art> pit = formParams.iterator(); 
int i=0; 

while(pit.hasNext()){ 
parts[i++] = pit.next(); 
} 
//               
//StringPart sp = new StringPart("TEXT", "testValue", "GB2312");  
//FilePart fp = new FilePart("file", "test.txt", new File("./temp/test.txt"), null, "GB2312" 
//postMethod.getParams().setContentCharset("GB2312"); 

MultipartRequestEntity mrp = new MultipartRequestEntity(parts, post.getParams()); 
post.setRequestEntity(mrp); 

//execute post method 
HttpClient client = new HttpClient(); 
int code = client.executeMethod(post); 
System.out.println(code); 
} catch ... 
} 
 

             java     post  ,             
java    main  : 
public static void main(String[] args){ 
String actionUrl = "http://192.168.0.123:8080/WSserver/androidUploadServlet"; 
Map<String, String> strParams = new HashMap<String, String>(); 
strParams.put("paramOne", "valueOne"); 
strParams.put("paramTwo", "valueTwo"); 
FormBean[] files = new FormBean[]{new FormBean("dest1.xml", "F:/testpostsrc/main.xml")}; 
HttpTool.postMultiParams(actionUrl,strParams,files); 
} 
 

        ,      android   ,        。 
                PostMethod ,org.apache.commons.httpclient.methods.PostMethod          ; 
       VerifyError。                  ,   SDK        ,          ~~ 
          http request     post   ,          ,           ,          java     post  , servlet        ,                  !    : 
*********************************************************** 
/** 
*              ,             
* @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
"; 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) 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(); // int res = conn.getResponseCode(); if (res == 200) { InputStream in = conn.getInputStream(); int ch; StringBuilder sb2 = new StringBuilder(); while ((ch = in.read()) != -1) { sb2.append((char) ch); } } outStream.close(); conn.disconnect(); return in.toString(); } ********************** button : ********************** public void onClick(View v){ String actionUrl = getApplicationContext().getString(R.string.wtsb_req_upload); Map<String, String> params = new HashMap<String, String>(); params.put("strParamName", "strParamValue"); Map<String, File> files = new HashMap<String, File>(); files.put("tempAndroid.txt", new File("/sdcard/temp.txt")); try { HttpTool.postMultiParams(actionUrl, params, files); } catch ... *************************** servlet : *************************** public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //print request.getInputStream to check request content //HttpTool.printStreamContent(request.getInputStream()); RequestContext req = new ServletRequestContext(request); if(FileUpload.isMultipartContent(req)){ DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(factory); fileUpload.setFileSizeMax(FILE_MAX_SIZE); List items = new ArrayList(); try { items = fileUpload.parseRequest(request); } catch ... Iterator it = items.iterator(); while(it.hasNext()){ FileItem fileItem = (FileItem)it.next(); if(fileItem.isFormField()){ System.out.println(fileItem.getFieldName()+" "+fileItem.getName()+" "+new String(fileItem.getString().getBytes("ISO-8859-1"),"GBK")); } else { System.out.println(fileItem.getFieldName()+" "+fileItem.getName()+" "+ fileItem.isInMemory()+" "+fileItem.getContentType()+" "+fileItem.getSize()); if(fileItem.getName()!=null && fileItem.getSize()!=0){ File fullFile = new File(fileItem.getName()); File newFile = new File(FILE_SAVE_PATH+fullFile.getName()); try { fileItem.write(newFile); } catch ... } else { System.out.println("no file choosen or empty file"); } } } } } public void init() throws ServletException { // web.xml init-param FILE_MAX_SIZE = Long.parseLong(this.getInitParameter("file_max_size"));// FILE_SAVE_PATH = this.getInitParameter("file_save_path");// }

좋은 웹페이지 즐겨찾기