chttp上傳文件
Ⅰ 怎麼用C實現Http POST功能向Http伺服器上傳文件
用socket就行了。
和伺服器建立請求。
然後發送請求報文"\r\n\r\n"結束之後是數據。
post分為,application/x-www-form-urlencoded和multipart/form-data boundary=
要是上傳文件,就得使用multipart/form-data boundary=...
伺服器那邊根據boundary來解析出數據。
Ⅱ 上傳文件總是顯示「http error」,怎麼辦事
HTTP
Error是一種響應錯誤。
解決方案如下:
1、上傳介面要求表單中文件的欄位是'file',即在表單中是:
`<input type="file" name="file">`
這樣一個input,其name為'file'。
相對應的,要將uploadify的fileObjName這個選項設置為'file',
2、另外就是檢查一下,token參數是否加入了uploadify的formData中,
根據代碼補充:
'formData':{'uptoken':'${uptoken}'},
修改為
'formData':{'token':'${uptoken}'},
Ⅲ 怎麼用http上傳一個文件到伺服器 python
首先,標准HTTP協議對上傳文件等表單的定義在這里:wwwietforg/rfc/rfc1867txt 大概數據包格式如下:
單文件:
Content-type: multipart/form-data, boundary=AaB03x
--AaB03x
content-disposition: form-data; name="field1"
Joe Blow
--AaB03x
content-disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
多文件:
Content-type: multipart/form-data, boundary=AaB03x
--AaB03x
content-disposition: form-data; name="field1"
Joe Blow
--AaB03x
content-disposition: form-data; name="pics"
Content-type: multipart/mixed, boundary=BbC04y
--BbC04y
Content-disposition: attachment; filename="file1.txt"
其次,python上傳文件的幾種方法:
1 自己封裝HTTP的POST數據包:http//stackoverflowcom/questions/680305/using-multipartposthandler-to-post-form-data-with-python
import httplibimport mimetypesdef post_multipart(host, selector, fields, files): content_type, body = encode_multipart_formdata(fields, files) h = httplib.HTTP(host) h.putrequest('POST', selector) h.putheader('content-type', content_type) h.putheader('content-length', str(len(body))) h.endheaders() h.send(body) errcode, errmsg, headers = h.getreply() return h.file.read() def encode_multipart_formdata(fields, files): LIMIT = '----------lImIt_of_THE_fIle_eW_$' CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + LIMIT) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('') L.append(value) for (key, filename, value) in files:
Ⅳ 上傳文件時出現http error 500錯誤
首先,上傳大小的限制有兩個,一個叫post_max_size,一個叫upload_max_filesize。
然後,你看它提示的是HTTP Error 500。
五百錯誤的原因比較多,但一般來說,都是伺服器代碼的錯誤而導致其內部錯誤的。
那麼據此推想,可能的原因有下:
沒有配置允許上傳文件;
沒有配置上傳文件的臨時目錄;
臨時目錄或上傳目錄路徑有系統不能識別的字元(如漢字等);
臨時目錄或上傳目標無寫入許可權;
上傳文件有系統不能識別的字元(如漢字等);
本地上傳文件的目錄路徑有系統不能識別的字元;
……
目前只能想到這些了,不過你可以直接找到上傳文件的那一段代碼,逐行寫上測試錯誤的代碼,就可以找到哪裡出錯了,進而找到根本原因。
Ⅳ 用瀏覽器上傳文件顯示http請求錯誤是怎麼回事
上傳文件顯示http請求錯誤的原因:
1、網路問題,可能當前的網路不好,可以嘗試重新上傳;或者檢查一下路由器。
2、瀏覽器的問題,可以嘗試換個瀏覽器。
3、防火牆,有可能被設置到了吧。
4、網頁問題,可能停留時間太長導致和後端的服務改帆滾器斷開連接,刷新一下。
5、文檔的格式問題。
此錯誤表明傳輸給伺服器的證書與登錄伺服器所需的證書不匹配。
請與 Web 伺服器的管理員聯系,以確認您是否具有訪問所請求資源核余的許可權。 401.2 未授權:伺服器的配置導致登錄失敗。
此錯誤表明傳輸給伺服器的證書與登錄伺服器所需的證書不匹配。此錯誤通常由未發送正確的 WWW 驗證表頭欄位所致。
請與 Web 服務轎羨器的管理員聯系,以確認您是否具有訪問所請求資源的許可權。 401.3 未授權:由於資源中的 ACL 而未授權。
此錯誤表明客戶所傳輸的證書沒有對伺服器中特定資源的訪問許可權。此資源可能是客戶機中的地址行所列出的網頁或文件,也可能是處理客戶機中的地址行所列出的文件所需伺服器上的其他文件。
請記錄試圖訪問的完整地址,並與 Web 伺服器的管理員聯系以確認您是否具有訪問所請求資源的許可權。
錯誤解釋:
此錯誤表明 Web 伺服器已經安裝了篩選程序,用以驗證連接到伺服器的用戶。此篩選程序拒絕連接到此伺服器的真品證書的訪問。 請記錄試圖訪問的完整地址,並與 Web 伺服器的管理員聯系以確認您是否具有訪問所請求資源。
Ⅵ http中上傳文件的原理
http中上傳文件的原理如下:
在最初的http協議中,沒有上傳文件方面的功能。 rfc1867 ( http://www.ietf.org/rfc/rfc1867.txt ) 為 http 協議添加了這個功能。客戶端的瀏覽器,如 Microsoft IE, Mozila, Opera 等,按照此規范將用戶指定的文件發送到伺服器。伺服器端的網頁程序,如 php, asp, jsp 等,可以按照此規范,解析出用戶發送來的文件。Microsoft IE, Mozila, Opera 已經支持此協議,在網頁中使用一個特殊的 form 就可以發送文件。絕大部分 http server ,包括 tomcat ,已經支持此協議,可接受發送來的文件。各種網頁程序,如 php, asp, jsp 中,對於上傳文件已經做了很好的封裝。
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網路協議。所有的WWW文件都必須遵守這個標准。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法,並稱之為超文本(hypertext),這成為了HTTP超文本傳輸協議標准架構的發展根基。
Ⅶ http文件上傳的原理是什麼請問向qq郵箱這類可以上傳文件的網頁,他們上傳文件的原理是不是,當用
有個誤區:
在上傳插件中,用戶點擊提交(確認)後,文件才開始上傳,這時候,會上傳到伺服器的某個目錄(不是臨時目錄,一般是伺服器按照管理用戶文件的規則所建立的文件夾),伺服器會返回一個指針,這個指針指向了你上傳的文件。當你發送郵件後,郵件中也會包含這個指針。不管你把這個文件放到哪個文件夾,實際上都只是存放的這個指針而已。如非管理需要,這個文件應該會永久保存,任何轉發,轉儲的行為,其實也只是操作的這個指針而不是文件本身。
即使你刪除文件,也只是在你的文件夾中刪除這個指針。所以,很多「極速秒傳」實際上是先判斷你要上傳的文件的MD5值是否已經在伺服器中存在,如果存在,就把已存在的文件的指針放上去,是不是很快?
Ⅷ 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