HttpURLConnection實現java後臺上傳檔案和其他引數
阿新 • • 發佈:2019-01-28
最近在對接某第三方視訊服務商的介面,使用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;
}
}