當前位置:首頁 » 文件管理 » androidhttp上傳數據

androidhttp上傳數據

發布時間: 2023-08-12 09:02:25

① android的自帶的httpClient 怎麼上傳文件

在Android開發中,Android SDK附帶了Apache的HttpClient,它是一個完善的客戶端。它提供了對HTTP協議的全面支持,可以使用HttpClient的對象來執行HTTP GET和HTTP POST調用。

HTTP工作原理:

1.客戶端(一般是指瀏覽器,這里是指自己寫的程序)與伺服器建立連接

2.建立連接後,客戶端向伺服器發送請求

3.伺服器接收到請求後,向客戶端發送響應信息

4.客戶端與伺服器斷開連接


HttpClient的一般使用步驟:

1.使用DefaultHttpClient類實例化HttpClient對象

2.創建HttpGet或HttpPost對象,將要請求的URL通過構造方法傳入HttpGet或HttpPost對象。

3.調用execute方法發送HTTP GET或HTTP POST請求,並返回HttpResponse對象。

4.通過HttpResponse介面的getEntity方法返回響應信息,並進行相應的處理。

最後記得要在AndroidManifest.xml文件添加網路許可權

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


附件中包含了一個拍照上傳的源代碼


② android-async-http批量上傳

我這有個httpclient寫的工具類
批量上傳的話,只需要傳遞一個FIle對象還可以帶上傳進度條

服務端的話就簡單了
如果是struts的話,只要定義一個fileUpload的攔截器,定義一個List<File> 對象就會自動注入了
如果是servlet的話,那就要用FileUpload + io 兩個架包,自己寫代碼去讀取文件了

我這有個客戶端,android寫的

③ android okhttp上傳文件mediatype有哪些

/**
* @param mediaType MediaType
* @param uploadUrl put請求地址
* @param localPath 本地文件路徑
* @return 響應的結果 和 HTTP status code
* @throws IOException
*/
public String put(MediaType mediaType, String uploadUrl, String localPath) throws IOException {
File file = new File(localPath);
RequestBody body = RequestBody.create(mediaType, file);
Request request = new Request.Builder()
.url(uploadUrl)
.put(body)
.build();
Response response = client.newCall(request).execute();
return response.code()+ ":" + response.body().string() ;
}

//上傳JPG圖片
public String putImg(String uploadUrl, String localPath) throws IOException {
MediaType Image = MediaType.parse("image/jpeg; charset=utf-8");

④ Android中使用HttpPost實現數據與文件同時上傳的功能

第一步:編寫一個Servlet,把接收到的HTTP信息保存在一個文件中,代碼如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {
//獲取輸入流,是HTTP協議中的實體內容

ServletInputStream sis=request.getInputStream();
//緩沖區

byte buffer[]=new byte[1024];
FileOutputStream fos=new FileOutputStream("d://file.log");

int len=sis.read(buffer, 0, 1024);
//把流里的信息循環讀入到file.log文件中
while( len!=-1 )
{
fos.write(buffer, 0, len);
len=sis.readLine(buffer, 0, 1024);
}
fos.close();
sis.close();
}
第二步:實現如下圖1的的表單頁面,生成一個注冊表單,提交到Servlet中

詳細的代碼如下:

<form action="servlet/ReceiveFile" method="post" enctype="multipart/form-data">
第一個參數<input type="text" name="name1"/> <br/>
第二個參數<input type="text" name="name2"/> <br/>
第一個上傳的文件<input type="file" name="file1"/> <br/>
第二個上傳的文件<input type="file" name="file2"/> <br/>
<input type="submit" value="提交">
</form>
注意了,由於要上傳附件,所以一定要設置enctype為multipart/form-data,才可以實現附件的上傳。
第三步:填寫完信息後按「提交」按鈕後,在D盤下查找file.log文件用記事本打開,數據如下:
-----------------------------7d92221b604bc
Content-Disposition: form-data; name="name1"
hello
-----------------------------7d92221b604bc
Content-Disposition: form-data; name="name2"
world
-----------------------------7d92221b604bc
Content-Disposition: form-data; name="file1"; filename="C:/2.GIF"
Content-Type: image/gif
GIF89a

⑤ 說說在 Android 中如何發送 HTTP 請求

客戶端會向伺服器發出一條 HTTP 請求,伺服器收到請求後會返回一些數據給客戶端,然後客戶端再對這些數據進行解析與處理。

可以使用 HttpURLConnection(官方推薦) 來發送 HTTP 請求。

布局文件:

活動類:

因為在 Android 中不允許在子線程中執行 UI 操作,所以我們通過 runOnUiThread 方法,切換為主線程,然後再更新 UI 元素。

最後記得聲明網路許可權哦:

OKHttp 是一個處理網路請求的開源項目,目前是 Android 最火熱的輕量級框架,由移動支付 Square 公司貢獻(該公司還貢獻了Picasso)。希望替代 HttpUrlConnection 和 Apache HttpClient。

首先引入 OKHttp 庫依賴:

然後點擊 Android Studio 右上角的 Sync Now,把庫真正載入進來。

修改活動類:

可以在 build() 方法之前連綴很多其他方法來豐富這個 Request 對象。

如果是 POST 請求,那麼需要構建 RequestBody 對象,形如:

修改活動類:

注意: new Thread(...) 之後需要執行 start() 才會啟動線程哦。

運行:

可以看出,OKHttp 比 HttpURLConnection 更強大:同一個網址,OKHttp 能夠正確地返回響應數據哦O(∩_∩)O哈哈~

⑥ Android Q 上基於 OkHttp 上傳(大)文件的實現

如圖,RequestBody 有好幾個 create 方法,可以滿足不同場景下的內容上傳,比如字元串、位元組數組和文件。

顯然,字元串和位元組數組是不能上傳大文件的,均可能 OOM。

那麼,就只能使用 RequestBody create(MediaType contentType, File file) 方法了。正常情況下也是沒什麼問題的,但是在 Android Q 上,由於存儲許可權的變更,將導致無法直接訪問從內容庫所選擇的文件。

得到如下日誌:

可見,即使通過 uri 得到了文件的真實路徑,也是無法直接訪問的。

通過上面的實驗可以看到,我們是無法直接通過 File 相關的 API 訪問原始文件的,但是我們卻可以通過 ContentResolver 得到原始文件的流。

類似地,可以基於流或者 FileDescriptor 對圖片解碼成 Bitmap,參考:

⑦ android使用httpURLconnection怎麼同時上傳文件和參數到伺服器

// 首先組拼文本類型的參數
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());

熱點內容
伺服器幾百台是什麼意思 發布:2025-03-09 06:42:40 瀏覽:606
python重啟服務 發布:2025-03-09 06:42:06 瀏覽:110
解壓視頻按摩 發布:2025-03-09 06:41:53 瀏覽:803
php源碼審計 發布:2025-03-09 06:41:17 瀏覽:710
碼猿編程是什麼 發布:2025-03-09 06:41:16 瀏覽:357
手機號碼密碼怎麼改 發布:2025-03-09 06:39:27 瀏覽:758
谷歌伺服器ip地址中國 發布:2025-03-09 06:33:53 瀏覽:218
在哪裡可以買到安卓版 發布:2025-03-09 06:28:00 瀏覽:707
sql的參考文獻 發布:2025-03-09 06:22:24 瀏覽:636
升級i5要換什麼配置 發布:2025-03-09 06:22:16 瀏覽:773