使用form-data表單上傳圖片
阿新 • • 發佈:2019-02-10
這是參考的大神的文章,連結忘了,這是很早的參考文章寫出來的。只需改動幾個地方,就OK
public class FileImageUpload {
private static final String TAG = “uploadFile”;
private static final int TIME_OUT = 10*10000000; //超時時間
private static final String CHARSET = “utf-8”; //設定編碼
public static final String SUCCESS=”1”;
public static final String FAILURE=”0”;
/* android上傳檔案到伺服器
* @param file 需要上傳的檔案
* @param RequestURL 請求的rul
* @return 返回響應的內容
*/
public static String uploadFile(File file,String RequestURL,Context mcontext) {
String BOUNDARY = UUID.randomUUID().toString(); //邊界標識 隨機生成
String PREFIX = “–” , LINE_END = “\r\n”;
String CONTENT_TYPE = “multipart/form-data”; //內容型別
try {
URL url = new URL(RequestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(TIME_OUT); conn.setConnectTimeout(TIME_OUT); conn.setDoInput(true); //允許輸入流 conn.setDoOutput(true); //允許輸出流 conn.setUseCaches(false); //不允許使用快取 // conn.setRequestMethod("POST"); //請求方式 如有需要,新增請求頭 /*conn.setRequestP //設定編碼 conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); if(file!=null) { /** * 當檔案不為空,把檔案包裝並且上傳 */ OutputStream outputSteam=conn.getOutputStream(); DataOutputStream dos = new DataOutputStream(outputSteam); StringBuffer sb = new StringBuffer(); sb.append(PREFIX); sb.append(BOUNDARY); sb.append(LINE_END); /** * 這裡重點注意: * name裡面的值為伺服器端需要key 只有這個key 才可以得到對應的檔案 * filename是檔案的名字,包含字尾名的 比如:abc.png * name對應的屬性是 圖片的格式 自己是什麼就填什麼 如: pic jseg * Content-Type 值 需要上網查查,對應相應的值 */ sb.append("Content-Disposition: form-data; name=\"pic\"; filename=\""+file.getName()+"\""+LINE_END); sb.append("Content-Type: image/png; charset="+CHARSET+LINE_END); sb.append(LINE_END); dos.write(sb.toString().getBytes()); InputStream is = new FileInputStream(file); byte[] bytes = new byte[1024]; int len = 0; while((len=is.read(bytes))!=-1) { dos.write(bytes, 0, len); } is.close(); dos.write(LINE_END.getBytes()); byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes(); dos.write(end_data); dos.flush(); /** * 獲取響應碼 200=成功 * 當響應成功,獲取響應的流 */ int res = conn.getResponseCode(); String s=conn.getContent().toString(); if(res==200) { BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder response = new StringBuilder(); String oneLine; while((oneLine = input.readLine()) != null) { response.append(oneLine + LINE_END); } return response.toString(); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return FAILURE; }
}