您的位置:首页 > 移动开发 > Android开发

android 使用post方式上传文件

2017-02-04 15:37 260 查看
转载自:http://blog.csdn.net/banyingli/article/details/6820436

[java] view
plaincopy

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\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"); // 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();  

    InputStream in = conn.getInputStream();  

    InputStreamReader isReader = new InputStreamReader(in);  

    BufferedReader bufReader = new BufferedReader(isReader);  

    String line = null;  

    String data = "OK";  

  

    while ((line = bufReader.readLine())
!= null)  

        data += line;  

  

    if (res == 200) {  

        int ch;  

        StringBuilder sb2 = new StringBuilder();  

        while ((ch = in.read()) != -1) {  

            sb2.append((char) ch);  

        }  

    }  

    outStream.close();  

    conn.disconnect();  

    return in.toString();  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: