在頁(yè)面里實(shí)現(xiàn)上傳文件不是什么難事 寫個(gè)form 加上enctype = multipart/form data 在寫個(gè)接收的就可以了 沒(méi)什么難的 如果要用 HttpURLConnection來(lái)實(shí)現(xiàn)文件上傳 還真有點(diǎn)搞頭 : )
10多年的門源網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整門源建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“門源網(wǎng)站設(shè)計(jì)”,“門源網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
先寫個(gè)servlet把接收到的 HTTP 信息保存在一個(gè)文件中 看一下 form 表單到底封裝了什么樣的信息
Java代碼
public void doPost(HttpServletRequest request HttpServletResponse response)
throws ServletException IOException {
//獲取輸入流 是HTTP協(xié)議中的實(shí)體內(nèi)容
ServletInputStream? in=request getInputStream();
//緩沖區(qū)
byte buffer[]=new byte[ ];
FileOutputStream out=new FileOutputStream( d:\\test log );
int len=sis read(buffer );
//把流里的信息循環(huán)讀入到file log文件中
while( len!= ){
out write(buffer len);
len=in readLine(buffer );
}
out close();
in close();
}
來(lái)一個(gè)form表單
form name= upform action= upload do method= POST
enctype= multipart/form data
參數(shù)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
假如我參數(shù)寫的內(nèi)容是hello word 然后二個(gè)文件是二個(gè)簡(jiǎn)單的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
研究下規(guī)律發(fā)現(xiàn)有如下幾點(diǎn)特征
第一行是 d b bc 作為分隔符 然后是 \r\n 回車換行符 這個(gè) d b bc 分隔符瀏覽器是隨機(jī)生成的
第二行是Content Disposition: form data; name= file ; filename= D:\huhu txt ;name=對(duì)應(yīng)input的name值 filename對(duì)應(yīng)要上傳的文件名(包括路徑在內(nèi))
第三行如果是文件就有Content Type: text/plain 這里上傳的是txt文件所以是text/plain 如果上穿的是jpg圖片的話就是image/jpg了 可以自己試試看看
然后就是回車換行符
在下就是文件或參數(shù)的內(nèi)容或值了 如 hello word
最后一行是 da e c 注意最后多了二個(gè) ;
有了這些就可以使用HttpURLConnection來(lái)實(shí)現(xiàn)上傳文件功能了
Java代碼 public void upload(){
ListString list? = new ArrayListString();? //要上傳的文件名 如 d:\haha doc 你要實(shí)現(xiàn)自己的業(yè)務(wù) 我這里就是一個(gè)空l(shuí)ist
try {
String BOUNDARY = d a d c ; // 定義數(shù)據(jù)分隔線
URL url = new URL( );
HttpURLConnection conn = (HttpURLConnection) url openConnection();
// 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
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 = ( \r\n + BOUNDARY + \r\n ) getBytes();// 定義最后數(shù)據(jù)分隔線
int leng = list size();
for(int i= ;ileng;i++){
String fname = list get(i);
File file = new File(fname);
StringBuilder *** = new StringBuilder();
*** append( );
*** append(BOUNDARY);
*** append( \r\n );
*** append( Content Disposition: form data;name=\ file +i+ \ ;filename=\ + file getName() + \ \r\n );
*** append( Content Type:application/octet stream\r\n\r\n );
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( \r\n getBytes()); //多個(gè)文件時(shí) 二個(gè)文件之間加入這個(gè)
in close();
}
out write(end_data);
out flush();
out close();
// 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng)
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( 發(fā)送POST請(qǐng)求出現(xiàn)異常! + e);
e printStackTrace();
}
lishixinzhi/Article/program/Java/hx/201311/27114
我覺(jué)得你這個(gè)問(wèn)題的解決應(yīng)該是你的程序做一次這個(gè)網(wǎng)站的登陸,而且這個(gè)登陸的動(dòng)作應(yīng)該是需要發(fā)生在你這段代碼以前,因?yàn)槟氵@段代碼的動(dòng)作其實(shí)只是訪問(wèn)了一下那個(gè)網(wǎng)站,但是沒(méi)有任何的用戶或者是其他的信息。
一般來(lái)說(shuō)你登陸以后,你會(huì)獲得一個(gè)token,用那個(gè)token就可以讓網(wǎng)站認(rèn)為你已經(jīng)登陸,然后改密碼什么就好辦了。建議你先抓一下IE的包看看是人家的通信是怎么樣的,然后用java做就好了?;蛘呤悄莻€(gè)網(wǎng)站有開(kāi)發(fā)者文檔就最好了。
這是J2EE里面的內(nèi)容,你將form表單里面的URL改為服務(wù)器里面的servlet的訪問(wèn)URL,服務(wù)器就可以處理html發(fā)過(guò)來(lái)的請(qǐng)求,然后由servlet跳轉(zhuǎn)到原來(lái)訪問(wèn)網(wǎng)頁(yè),并將處理好的數(shù)據(jù)一起發(fā)過(guò)來(lái),原來(lái)html可以通過(guò)AJAX編程來(lái)接受來(lái)自服務(wù)器的請(qǐng)求,并進(jìn)行控制顯示!?。?/p>
/**
* 向指定 URL 發(fā)送POST方法的請(qǐng)求
*
* @param url
* 發(fā)送請(qǐng)求的 URL
* @param param
* 請(qǐng)求參數(shù),請(qǐng)求參數(shù)應(yīng)該是 name1=value1name2=value2 的形式。
* @return 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打開(kāi)和URL之間的連接
URLConnection conn = realUrl.openConnection();
// 設(shè)置通用的請(qǐng)求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流
out = new PrintWriter(conn.getOutputStream());
// 發(fā)送請(qǐng)求參數(shù)
out.print(param);
// flush輸出流的緩沖
out.flush();
// 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng)
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("發(fā)送 POST 請(qǐng)求出現(xiàn)異常!"+e);
e.printStackTrace();
}
//使用finally塊來(lái)關(guān)閉輸出流、輸入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
個(gè)人想法是這樣的 你用的是HttpURLConnection 類
也就是說(shuō)這個(gè)協(xié)議是http協(xié)議
超文本傳輸就是你發(fā)送了一個(gè)請(qǐng)求然后服務(wù)器給你答復(fù),所以只要你把包發(fā)出去一定有響應(yīng)
可以不用http請(qǐng)求看看比如只用sockt建立一個(gè)
另外有一個(gè)URLConnection 就是HttpURLConnection 的父類存在一個(gè)setDoInput方法 你看看能不能通過(guò)這個(gè)來(lái)設(shè)置
我的抓包工具不能用所以代碼沒(méi)法幫你調(diào)
要不推薦個(gè)工具給我吧
這里有整套的Java發(fā)送HTTP請(qǐng)求的代碼,包括Post、Get、Delete、Put、Trace、Head、Options請(qǐng)求方法,鏈接如下:
然后線上實(shí)力Demo:
網(wǎng)頁(yè)標(biāo)題:通過(guò)java代碼發(fā)送請(qǐng)求 通過(guò)java代碼發(fā)送請(qǐng)求文件
標(biāo)題路徑:http://chinadenli.net/article48/hgcgep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、靜態(tài)網(wǎng)站、搜索引擎優(yōu)化、營(yíng)銷型網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容