android以post方式实现上传图片和表单

                                                                                         android以post方式上传浅谈

       菜鸟一枚,大神可以自动略过这篇文章,公司做项目用到post方式上传 ,有图片,有一些个人信息,我们采取的方法是

先以post方式上传图片,然后后台反馈给URL,然后再以post表单形式上传姓名,电话等加上图片URL,只要能保存到后台数据

库中,就算成功。开始上传图片时将bitmap转换成流传给服务器,服务器一直收不到数据,后来图片直接以文件的形式传输,后

台省事,我这儿也不麻烦,只是图片大小没有做限制,幸亏访问量不大大笑

         下面附上上传表单,及图片的工具类,在该工具类中直接把反馈回来的图片URL,赋给了上传表单的方法!

         记得调用该工具类时,放到子线程中哦!!

 

 

<span style="font-size:18px;">package com.shenbingyiyuan.shenboshi.huanzherukou;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

public class UpLodeUtil {
	
	
	    private static final String TAG = "uploadFile";  
	    private static final int TIME_OUT = 10 * 1000; // 超时时间  
	    private static final String CHARSET = "utf-8"; // 设置编码  
	    private static String laboratory;
	    /** 
	     * 上传文件到服务器 
	     * @param file 需要上传的文件 
	     * @param RequestURL 请求的rul 
	     * @return 返回响应的内容 
	     */  
	    public static String  post(final Context context ,final String posturi,final String id,final String name,final String phone,final String ptype,final String symptom) {
		                        String resultq=null;
	    	</span>
<span style="font-size:18px;">					HttpClient httpClient = new DefaultHttpClient();
					HttpPost httpPost = new HttpPost(	posturi);
					List<NameValuePair> params = new ArrayList<NameValuePair>();
					params.add(new BasicNameValuePair("PATIENT_ID", id));// 患者id
					//params.add(new BasicNameValuePair("headurl", headurl));//头像
					params.add(new BasicNameValuePair("NAME", name));// 姓名
					params.add(new BasicNameValuePair("PHONE", phone));// 电话				
					params.add(new BasicNameValuePair("PTYPE",  ptype));// 症状类型,int
					params.add(new BasicNameValuePair("SYMPTOM", symptom));// 症状描述
					params.add(new BasicNameValuePair("LABORATORY", laboratory));// 化验单
					
					
					try {
						/* UrlEncodedFormEntity默认为"ISO-8859-1"改为"UTF-8"编码格式 */
						HttpEntity entity = new UrlEncodedFormEntity(params,
								"UTF-8");
						httpPost.setEntity(entity);
						HttpResponse response = httpClient.execute(httpPost);// 提交表单
						HttpEntity httpEntity = response.getEntity();// 得到服务器响应
						String result = EntityUtils.toString(httpEntity, "UTF-8");// 得到服务器返回的json数据
						JSONObject object = new JSONObject(result);// 解析返回值
						/* 判断返回值参数 */
						if (object.getString("result").equals("01")) {
							Toast.makeText(context, "修改成功",
									Toast.LENGTH_SHORT).show();
							resultq = "01";
							return resultq;
						} else if (object.getString("result").equals("02")) {
							Toast.makeText(context, "修改失败",
									Toast.LENGTH_SHORT).show();
							resultq = "02";
							return resultq;
						}
					} catch (Exception e) {
						e.printStackTrace();
					}
				
					return resultq;
				}
		
		

	    
	    
	    
	    
	    /***********************************************************************/
	    public static int uploadFile(File file, String RequestURL) {  
	        int res=0;  
	        String result = null;  
	        String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成  
	        String PREFIX = "--", LINE_END = "\r\n";  
	        String CONTENT_TYPE = "multipart/form-data"; // 内容类型  
	  
	        try {  
	            URL url = new URL(RequestURL);  
	            HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	            conn.setReadTimeout(TIME_OUT);  
	            conn.setConnectTimeout(TIME_OUT);  
	            conn.setDoInput(true); // 允许输入流  
	            conn.setDoOutput(true); // 允许输出流  
	            conn.setUseCaches(false); // 不允许使用缓存  
	            conn.setRequestMethod("POST"); // 请求方式  
	            conn.setRequestProperty("Charset", CHARSET); // 设置编码  
	            conn.setRequestProperty("connection", "keep-alive");  
	            conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary="+ BOUNDARY);  
	  
	            if (file != null) {  
	                /** 
	                 * 当文件不为空时执行上传 
	                 */  
	                DataOutputStream dos = new DataOutputStream(conn.getOutputStream());  
	                StringBuffer sb = new StringBuffer();  
	                sb.append(PREFIX);  
	                sb.append(BOUNDARY);  
	                sb.append(LINE_END);  
	                /** 
	                 * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 
	                 * filename是文件的名字,包含后缀名 
	                 */  
	  
	                sb.append("Content-Disposition: form-data; name=\"file\"; filename=\""  
	                        + file.getName() + "\"" + LINE_END);  
	                sb.append("Content-Type: application/octet-stream; charset="  
	                        + CHARSET + LINE_END);  
	                sb.append(LINE_END);  
	                dos.write(sb.toString().getBytes());  
	                InputStream is = new FileInputStream(file);  
	                byte[] bytes = new byte[1024];  
	                int len = 0;  
	                while ((len = is.read(bytes)) != -1) {  
	                    dos.write(bytes, 0, len);  
	                }  
	                is.close();  
	                dos.write(LINE_END.getBytes());  
	                byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END)  
	                        .getBytes();  
	                dos.write(end_data);  
	                dos.flush();  
	                /** 
	                 * 获取响应码 200=成功 当响应成功,获取响应的流 
	                 */  
	                 res = conn.getResponseCode();  
	              //  Log.e(TAG, "response code:" + res);  
	                if (res == 200) {  
	                //    Log.e(TAG, "request success");  
	                    InputStream input = conn.getInputStream();  
	                    StringBuffer sb1 = new StringBuffer();  
	                    int ss;  
	                    while ((ss = input.read()) != -1) {  
	                        sb1.append((char) ss);  
	                    }  
	                    result = sb1.toString();  
	                    JSONObject jo;
						try {
							jo = new JSONObject(result);
							laboratory=	jo.getString("result");
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
	                    
	                   // Log.e(TAG, "result : " + result);  
	                } else {  
	                   // Log.e(TAG, "request error");  
	                }  
	            }  
	        } catch (MalformedURLException e) {  
	            e.printStackTrace();  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	        }  
	        return res;  
	    }  


}
</span>

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值