1. 程式人生 > >android post上傳檔案到伺服器

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;
}

            }
        }
    };