當前位置:首頁 » 文件管理 » httpurlconnection緩存

httpurlconnection緩存

發布時間: 2024-10-26 01:04:24

java利用HttpURLConnection發送post請求上傳文件

在頁面里實現上傳文件不是什麼難事 寫個form 加上enctype = multipart/form data 在寫個接收的就可以了 沒租褲什麼難的 如果要用 HttpURLConnection來實現文件上傳 還真有點搞頭 : )

先寫個servlet把接收到的 HTTP 信息保存在一個文件中 看一下 form 表單到底封裝了什麼樣的信息

Java代碼

public void doPost(HttpServletRequest request HttpServletResponse response)

throws ServletException IOException {

//獲取輸入流 是HTTP協議中的實體內容

ServletInputStream in=request getInputStream();

//緩沖區

byte buffer[]=new byte[ ];

FileOutputStream out=new FileOutputStream( d:\test log );

int len=sis read(buffer );

//把流里的信息循環讀入到file log文件中

while( len!= ){

out write(buffer len);

len=in readLine(buffer );

}

out close();

in close();

}

來一個form表單

<form name= upform action= upload do method= POST

enctype= multipart/form data >

參數<input type= text name= username /><br/>

文件 <input type= file name= file /><br/>

文件 <input type= file name= file /><br/>

<input type= submit value= Submit />

<br />

</form>

假如我參數寫的內容是hello word 然後二個文件是二個簡單的txt文件梁譽 上傳後test log里如下

Java代碼

da e c

Content Disposition: form data; name= username

hello word

da e c

Content Disposition: form data; name= file ; filename= D:haha txt

Content Type: text/plain

haha

hahaha

da e c

Content Disposition: form data; name= file ; filename= D:huhu txt

Content Type: text/plain

messi

huhu

da e c

研究下規律發現有如下幾點特徵

第一行是 d b bc 作為分隔符 然後是 回車換行符 這個 d b bc 分隔符瀏覽器是隨機生成的

第二行是Content Disposition: form data; name= file ; filename= D:huhu txt ;name=對應input的name值 filename對應要上傳的文件名(包括路徑在內)

第三行如果是文件就有Content Type: text/plain 這里上傳的是txt文件所以是text/plain 如果上穿的是jpg圖片的話就是image/jpg了 可以自己試試看看

然後就是回弊渣簡車換行符

在下就是文件或參數的內容或值了 如 hello word

最後一行是 da e c 注意最後多了二個 ;

有了這些就可以使用HttpURLConnection來實現上傳文件功能了

Java代碼 public void upload(){

List<String> list = new ArrayList<String>(); //要上傳的文件名 如 d:haha doc 你要實現自己的業務 我這里就是一個空list

try {

String BOUNDARY = d a d c ; // 定義數據分隔線

URL url = new URL( );

HttpURLConnection conn = (HttpURLConnection) url openConnection();

// 發送POST請求必須設置如下兩行

conn setDoOutput(true);

conn setDoInput(true);

conn setUseCaches(false);

conn setRequestMethod( POST );

conn setRequestProperty( connection Keep Alive );

conn setRequestProperty( user agent Mozilla/ (patible; MSIE ; Windows NT ; SV ) );

conn setRequestProperty( Charsert UTF );

conn setRequestProperty( Content Type multipart/form data; boundary= + BOUNDARY);

OutputStream out = new DataOutputStream(conn getOutputStream());

byte[] end_data = ( + BOUNDARY + ) getBytes();// 定義最後數據分隔線

int leng = list size();

for(int i= ;i<leng;i++){

String fname = list get(i);

File file = new File(fname);

StringBuilder *** = new StringBuilder();

*** append( );

*** append(BOUNDARY);

*** append( );

*** append( Content Disposition: form data;name= file +i+ ;filename= + file getName() + );

*** append( Content Type:application/octet stream );

byte[] data = *** toString() getBytes();

out write(data);

DataInputStream in = new DataInputStream(new FileInputStream(file));

int bytes = ;

byte[] bufferOut = new byte[ ];

while ((bytes = in read(bufferOut)) != ) {

out write(bufferOut bytes);

}

out write( getBytes()); //多個文件時 二個文件之間加入這個

in close();

}

out write(end_data);

out flush();

out close();

// 定義BufferedReader輸入流來讀取URL的響應

BufferedReader reader = new BufferedReader(new InputStreamReader(conn getInputStream()));

String line = null;

while ((line = reader readLine()) != null) {

System out println(line);

}

} catch (Exception e) {

System out println( 發送POST請求出現異常! + e);

e printStackTrace();

}

lishixin/Article/program/Java/hx/201311/27114

Ⅱ HttpClient和HttpURLConnection的區別

HttpClient
Apache公司提供的庫,提供高效的、最新的、功能豐富的支持HTTP協議工具包,支持HTTP協議最新的版本和建議,是個很不錯的開源框架,封裝了http的請求,參數,內容體,響應等,擁有眾多API。

•HttpURLConnection
Sun公司提供的庫,也是Java的標准類庫java.net中的一員,但這個類什麼都沒封裝,用起來很原始,若需要高級功能,則會顯得不太方便,比如重訪問的自定義,會話和cookie等一些高級功能。

功能用法對比
•從功能上對比,HttpClient庫要豐富很多,提供了很多工具,封裝了http的請求頭,參數,內容體,響應,還有一些高級功能,代理、COOKIE、鑒權、壓縮、連接池的處理。
•HttpClient高級功能代碼寫起來比較復雜,對開發人員的要求會高一些,而HttpURLConnection對大部分工作進行了包裝,屏蔽了不需要的細節,適合開發人員直接調用。
•另外,HttpURLConnection在2.3版本增加了一些HTTPS方面的改進,4.0版本增加一些響應的緩存

•性能對比
•HttpUrlConnection直接支持GZIP壓縮;HttpClient也支持,但要自己寫代碼處理。
•HttpUrlConnection直接支持系統級連接池,即打開的連接不會直接關閉,在一段時間內所有程序可共用;HttpClient當然也能做到,但畢竟不如官方直接系統底層支持好。
•HttpUrlConnection直接在系統層面做了緩存策略處理(4.0版本以上),加快了重復請求的速度。
從發展的眼光來看HttpUrlConnection比較有前途一些

(望樓主採納哦)

Ⅲ okhttp框架緩存問題,okhttp3無法使用okhttpclient.cache().get()來獲取response 求解!

OkHttp是一個相對成熟的解決方案,據說Android4.4的源碼中可以看到HttpURLConnection已經替換成OkHttp實現了。所以我們更有理由相信OkHttp的強大。
OkHttp 處理了很多網路疑難雜症:會從很多常用的連接問題中自動恢復。如果您的伺服器配置了多個IP地址,當第一個IP連接失敗的時候,OkHttp會自動嘗試下一個IP。OkHttp還處理了代理伺服器問題和SSL握手失敗問題。
使用 OkHttp 無需重寫您程序中的網路代碼。OkHttp實現了幾乎和java.net.HttpURLConnection一樣的API。如果你用了 Apache HttpClient,則OkHttp也提供了一個對應的okhttp-apache 模塊。

熱點內容
緩存的視頻很卡 發布:2024-10-26 03:36:10 瀏覽:971
存儲數據壓縮 發布:2024-10-26 03:33:08 瀏覽:909
破解qq空間訪問許可權2015 發布:2024-10-26 03:27:52 瀏覽:173
網頁簡訊源碼 發布:2024-10-26 03:25:32 瀏覽:167
android實現圓角 發布:2024-10-26 03:24:55 瀏覽:717
科雷伺服器ip 發布:2024-10-26 03:24:42 瀏覽:872
linux找回刪除文件 發布:2024-10-26 03:21:46 瀏覽:581
雲伺服器不能登錄天貓後台 發布:2024-10-26 03:21:01 瀏覽:104
我的世界116起床伺服器 發布:2024-10-26 03:19:35 瀏覽:72
modelsim腳本 發布:2024-10-26 02:58:09 瀏覽:174