Java上傳帶圖片的Http請求

jopen 9年前發布 | 2K 次閱讀 Java

/**

 * 上傳帶圖片的http請求
 * 
 * @param murl網址
 * @param map
 *            參數對 主要不要包括圖片
 * @param path
 *            圖片路徑 也可以是其他格式 自行做
 * @return
 * @throws Exception
 */
static public String post(String murl, HashMap<String, String> map,
        String path) throws Exception {
    File file = new File(path);
    String filename = path.substring(path.lastIndexOf("/"));
    // String filename = Str.md5(path);
    StringBuilder sb = new StringBuilder();
    if (null != map) {
        for (Map.Entry<String, String> entry : map.entrySet()) {
            sb.append("--" + BOUNDARY + "\r\n");
            sb.append("Content-Disposition: form-data; name=\""
                    + entry.getKey() + "\"" + "\r\n");
            sb.append("\r\n");
            sb.append(entry.getValue() + "\r\n");

        }
    }

    sb.append("--" + BOUNDARY + "\r\n");
    sb.append("Content-Disposition: form-data; name=\"image\"; filename=\""
            + filename + "\"" + "\r\n");

    sb.append("Content-Type: image/pjpeg" + "\r\n");
    sb.append("\r\n");

    byte[] before = sb.toString().getBytes("UTF-8");
    byte[] after = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");

    URL url = new URL(murl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type",
            "multipart/form-data; boundary=" + BOUNDARY);

    conn.setRequestProperty("Authorization",
            "Bearer " + Douban.getAccessToken());
    conn.setRequestProperty("Content-Length",
            String.valueOf(before.length + file.length() + after.length));
    conn.setRequestProperty("HOST", url.getHost());
    conn.setDoOutput(true);

    OutputStream out = conn.getOutputStream();
    InputStream in = new FileInputStream(file);

    out.write(before);

    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) != -1)
        out.write(buf, 0, len);

    out.write(after);

    in.close();
    out.close();
    MLog.e(inputStream2String(conn.getInputStream()) + "");
    return conn.getContent().toString();

}

/**
 * is轉String
 * 
 * @param in
 * @return
 * @throws IOException
 */
public static String inputStream2String(InputStream in) throws IOException {
    StringBuffer out = new StringBuffer();
    byte[] b = new byte[4096];
    for (int n; (n = in.read(b)) != -1;) {
        out.append(new String(b, 0, n));
    }
    return out.toString();
}</pre> 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!