91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何實現多參數文件和數據上傳

發布時間:2021-04-16 11:12:52 來源:億速云 閱讀:215 作者:小新 欄目:移動開發

這篇文章主要介紹Android如何實現多參數文件和數據上傳,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

具體內容如下

上代碼:

/**
 * 可傳入多張圖片和參數
 * 
 * @param actionUrl
 *   發送地址
 * @param params
 *   文本參數
 * @param files
 *   文件參數
 * @return
 * @throws IOException
 */
 public static String mulpost(String actionUrl, Map<String, String> params,
 Map<String, File> files) throws IOException {
 String result = "";
 
 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();
 
 InputStream is = conn.getInputStream();
 InputStreamReader isr = new InputStreamReader(is, "utf-8");
 BufferedReader br = new BufferedReader(isr);
 result = br.readLine();
 outStream.close();
 conn.disconnect();
 return result;
 }

方法就是這樣的。

使用時可封裝在自己的類里直接調用即可,記得加網絡訪問和讀取系統文件的權限哦。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

由于上傳是耗時操作,必須得要弄在另一個線程中調用才可以。

以上是“Android如何實現多參數文件和數據上傳”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

成安县| 卫辉市| 德保县| 应用必备| 吉林省| 拜泉县| 丰台区| 隆子县| 汤阴县| 永清县| 独山县| 蒙城县| 阿坝县| 法库县| 潼南县| 塔城市| 太和县| 云阳县| 元朗区| 关岭| 双辽市| 新乡市| 永平县| 古浪县| 双江| 四子王旗| 宁津县| 天等县| 新龙县| 民乐县| 桑植县| 东兰县| 明光市| 沿河| 永德县| 秭归县| 龙游县| 乌鲁木齐县| 南京市| 新竹县| 建瓯市|