中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

库尔勒市| 平顺县| 监利县| 敦化市| 阜新| 汝城县| 富锦市| 鹤庆县| 迁安市| 涡阳县| 宁陵县| 腾冲县| 越西县| 河曲县| 张掖市| 五莲县| 柘城县| 鄢陵县| 阳山县| 兰坪| 武平县| 绥棱县| 定远县| 乐昌市| 青州市| 上林县| 苍梧县| 如东县| 安图县| 棋牌| 平乡县| 隆子县| 隆安县| 固安县| 屯昌县| 南昌县| 长白| 古田县| 内丘县| 清丰县| 湖州市|