android post上传文件到服务器

/***************通过拼接的方式构造请求内容,实现参数传输以及文件传输****************/

public static String post(String url, 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(url);
    HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
    conn.setReadTimeout(10 * 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=\"picture\"; filename=\""
                    + file.getValue().getName() + "\"" + 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 = conn.getInputStream();
    StringBuilder sb2 = new StringBuilder();
    if (res == 200) {
        int ch;
        while ((ch = in.read()) != -1) {
            sb2.append((char) ch);
        }
    }
    outStream.close();
    conn.disconnect();
    return sb2.toString();
}

调用:
private void uploadImageFile(){
new Thread(new Runnable() {
@Override
public void run() {
int uploadResult = UPLOAD_FAIl;
//String requestURL = RequestUrl.URL + RequestUrl.Auth;
String requestURL = “http://192.168.1.68:8083“+RequestUrl.Auth;//局域网测试
//String requestURL = “http://192.168.1.68:8083/personal/test.html“;

            final Map<String, String> params = new HashMap<String, String>();



            String organizationId = mExpressCompanyToIdMap.get(mCompanyName);

            params.put("account",account);
            params.put("name", mRealName);
            params.put("organizationId", "1");//公司Id
            //params.put("provinceId", "110000");/*数据库查找*/
            //params.put("cityId", "110100");
            //params.put("areaId", "110101");
            params.put("address", "北京市朝阳区酒仙桥东路");

            final Map<String, File> files = new HashMap<String, File>();
            //(debug)File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath(),"/UCDownloads/4.jpg");
            Log.i("PATH+++++++++++NAME", file.getPath()+","+file.getName());

            files.put("picture", file);
            String request = null;
            try {
                request = FileImageUpload.post(requestURL, params, files);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Log.i("TAg","=======request==========="+request);
            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(request);
            } catch (JSONException e) {
                mHandler.sendEmptyMessage(uploadResult);
                e.printStackTrace();
            }
            try {
                if(jsonObject.getString("resultCode").equals("00000"))
                {
                    uploadResult = UPLOAD_SUCCESS;
                    mHandler.sendEmptyMessage(uploadResult);
                    Log.d("UploadImage", "上传成功" + "resultMessage:" + jsonObject.getString("resultMessage"));
                }
                else{

                    mHandler.sendEmptyMessage(uploadResult);
                    Log.d("UploadImage","上传失败");
                }
            } catch (JSONException e) {
                mHandler.sendEmptyMessage(uploadResult);
                Log.d("UploadImage网络异常","上传失败");
                e.printStackTrace();
            }
        }
    }).start();

更新UI:
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what)
{
case UPLOAD_SUCCESS:
{
//上传验证图片成功
Toast.makeText(IdentifyActivity.this,getResources().getString(R.string.info_upload_success).toString(),Toast.LENGTH_LONG).show();
finish();
break;
}
case UPLOAD_FAIl:
{
//上传图片失败
Toast.makeText(IdentifyActivity.this,getResources().getString(R.string.info_upload_fail).toString(),Toast.LENGTH_LONG).show();
break;
}

            }
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值