1. 程式人生 > >HttpURLConnection實現java後臺上傳檔案和其他引數

HttpURLConnection實現java後臺上傳檔案和其他引數

最近在對接某第三方視訊服務商的介面,使用java在後臺呼叫他們的介面。在對接設定封面時遇到一個問題,他們需要對個引數,且有一個引數的型別為file。苦尋半天,果。遂記錄如下。


import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @author Administrator
 *
 */
public
class WeihouUtil { public static void main(String[] args){ setActiveImage("1", "v10624388", "xinchengzhihuics", "451976930", "C:\\Users\\Administrator\\Desktop\\1_yuruixin_china.jpg"); } /** * @param auth_type * @param account * @param password * @param webinar_id * @param
image * @return */
public static String setActiveImage(String auth_type,String account,String password,String webinar_id,String image ){ String resStr = null; try{ String boundary = "Boundary-b1ed-4060-99b9-fca7ff59c113"; //Could be any string String Enter = "\r\n"
; File file = new File(image); FileInputStream fis = new FileInputStream(file); URL url = new URL("http://e.vhall.com/api/vhallapi/v2/webinar/activeimage"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary); conn.connect(); DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); //part 1 String part1 = "--" + boundary + Enter + "Content-Type: application/octet-stream" + Enter + "Content-Disposition: form-data; filename=\""+file.getName()+"\"; name=\"image\"" + Enter + Enter; //part 2 String part2 = Enter + "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"webinar_id\"" + Enter + Enter + webinar_id + Enter + "--" + boundary + "--"; //part 3 String part3 = Enter + "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"auth_type\"" + Enter + Enter + auth_type + Enter + "--" + boundary + "--"; //part 4 String part4 = Enter + "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"account\"" + Enter + Enter + account + Enter + "--" + boundary + "--"; //part 5 String part5 = Enter + "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"password\"" + Enter + Enter + password + Enter + "--" + boundary + "--"; byte[] xmlBytes = new byte[fis.available()]; fis.read(xmlBytes); dos.writeBytes(part1); dos.write(xmlBytes); dos.writeBytes(part2); dos.writeBytes(part3); dos.writeBytes(part4); dos.writeBytes(part5); dos.flush(); dos.close(); fis.close(); System.out.println("status code: "+conn.getResponseCode()); InputStream in = conn.getInputStream(); int ch; StringBuilder sb2 = new StringBuilder(); while ((ch = in.read()) != -1) { sb2.append((char) ch); } resStr = sb2.toString(); System.out.println(resStr); conn.disconnect(); }catch(Exception e){ e.printStackTrace(); } return resStr; } }