[轉載]http以post方式上傳一個檔案,構造其請求頭和訊息報文
首先客戶端連結 192.168.24.56 後, 應該傳送如下http 請求:
Accept:
text/plain, */*
Accept-Language: zh-cn
Host: 192.168.24.56
Content-Type:multipart/form-data;boundary=-----------------------------7db372eb000e2
User-Agent: WinHttpClient
Content-Length: 3693
Connection: Keep-Alive
-------------------------------7db372eb000e2
Content-Disposition: form-data; name="file"; filename="kn.jpg"
Content-Type: image/jpeg
(此處省略jpeg檔案二進位制資料...)
-------------------------------7db372eb000e2--
此內容必須一字不差,包括最後的回車,紅色字型部分就是協議的頭。給伺服器上傳資料時,並非協議頭每個欄位都得說明,其中,content-type是必須的,它包括一個類似標誌性質的名為boundary的標誌,它可以是隨便輸入的字串。對後面的具體內容也是必須的。它用來分辨一段內容的開始。
注意這一行:
Content-Type: multipart/form-data; boundary=---------------------------7db372eb000e2
根據 rfc1867, multipart/form-data是必須的.
---------------------------
前面的 ---------------------------7d 是 IE 特有的標誌,Mozila 為---------------------------71.
例如:Contect-Type:image/jpeg 表示下面的資料是jpeg檔案資料
============================================================================
[轉]通過 http 協議上傳檔案
2008-04-30 23:55
1、概述 在最初的 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 中,對於上傳檔案已經做了很好的封裝。 2、上傳檔案的例項:用 servelet 實現(http server 為 tomcat 4.1.24) 1. 在一個 html 網頁中,寫一個如下的form : <form enctype="multipart/form-data" action="http://192.168.29.65/UploadFile" method=post> load multi files :<br> <input name="userfile1" type="file"><br> <input name="userfile2" type="file"><br> <input name="userfile3" type="file"><br> <input name="userfile4" type="file"><br> text field :<input type="text" name="text" value="text"><br> <input type="submit" value="提交"><input type=reset> </form> 2. 服務端 servelet 的編寫 現在第三方的 http upload file 工具庫很多。Jarkata 專案本身就提供了fileupload 包http://jakarta.apache.org/commons/fileupload/ 。檔案上傳、表單項處理、效率問題基本上都考慮到了。在 struts 中就使用了這個包,不過是用 struts 的方式另行封裝了一次。這裡我們直接使用 fileupload 包。至於struts 中的用法,請參閱 struts 相關文件。 這個處理檔案上傳的 servelet 主要程式碼如下: public void doPost( HttpServletRequest request, HttpServletResponse response ) { DiskFileUpload diskFileUpload = new DiskFileUpload(); // 允許檔案最大長度 diskFileUpload.setSizeMax( 100*1024*1024 ); // 設定記憶體緩衝大小 diskFileUpload.setSizeThreshold( 4096 ); // 設定臨時目錄 diskFileUpload.setRepositoryPath( "c:/tmp" ); List fileItems = diskFileUpload.parseRequest( request ); Iterator iter = fileItems.iterator(); for( ; iter.hasNext(); ) { FileItem fileItem = (FileItem) iter.next(); if( fileItem.isFormField() ) { // 當前是一個表單項 out.println( "form field : " + fileItem.getFieldName() + ", " + fileItem.getString() ); } else { // 當前是一個上傳的檔案 String fileName = fileItem.getName(); fileItem.write( new File("c:/uploads/"+fileName) ); } } } 為簡略起見,異常處理,檔案重新命名等細節沒有寫出。 3、 客戶端傳送內容構造 假設接受檔案的網頁程式位於 http://192.168.29.65/upload_file/UploadFile. 假設我們要傳送一個二進位制檔案、一個文字框表單項、一個密碼框表單項。檔名為 E:\s ,其內容如下:(其中的XXX代表二進位制資料,如 01 02 03) a bb XXX ccc 客戶端應該向 192.168.29.65 傳送如下內容: POST /upload_file/UploadFile HTTP/1.1 Accept: text/plain, */* Accept-Language: zh-cn Host: 192.168.29.65:80 Content-Type:multipart/form-data;boundary=---------------------------7d33a816d302b6 User-Agent: Mozilla/4.0 (compatible; OpenOffice.org) Content-Length: 424 Connection: Keep-Alive -----------------------------7d33a816d302b6 Content-Disposition: form-data; name="userfile1"; filename="E:\s" Content-Type: application/octet-stream a bb XXX ccc -----------------------------7d33a816d302b6 Content-Disposition: form-data; name="text1" foo -----------------------------7d33a816d302b6 Content-Disposition: form-data; name="password1" bar -----------------------------7d33a816d302b6-- 此內容必須一字不差,包括最後的回車。 注意:Content-Length: 424 這裡的424是紅色內容的總長度(包括最後的回車) 注意這一行: Content-Type: multipart/form-data; boundary=---------------------------7d33a816d302b6 根據 rfc1867, multipart/form-data是必須的. ---------------------------7d33a816d302b6 是分隔符,分隔多個檔案、表單項。其中33a816d302b6 是即時生成的一個數字,用以確保整個分隔符不會在檔案或表單項的內容中出現。前面的 ---------------------------7d 是 IE 特有的標誌。 Mozila 為---------------------------71 用手工傳送這個例子,在上述的 servlet 中檢驗通過。 (上面有一個回車)使用者可以選擇多個檔案,填寫表單其它項,點選“提交”按鈕後就開始上傳給http://192.168.29.65/upload_file/UploadFile 這是一個 servelet 程式 注意 enctype="multipart/form-data", method=post, type="file" 。根據 rfc1867, 這三個屬性是必須的。multipart/form-data 是新增的編碼型別,以提高二進位制檔案的傳輸效率。具體的解釋請參閱 rfc1867 |
相關推薦
[轉載]http以post方式上傳一個檔案,構造其請求頭和訊息報文
首先客戶端連結 192.168.24.56 後, 應該傳送如下http 請求: Accept: text/plain, */* Accept-Language: zh-cn Host: 192.168.24.56 Content-Type:multipart/form-data;bo
php實現curl請求以post方式上傳圖片檔案
在呼叫第三方api介面時,有時會遇到通過http協議上傳圖片,以下是一個微信公眾平臺新增永久素材的例子;php程式碼: /* 使用curl函式 */ $url = "https://api.weixin.qq.com/cgi-bin/material/add_m
linux整理筆記:root使用者上傳的檔案,其他使用者無法覆蓋和刪除
場景: 多人協作一個目錄,root使用者一旦上上傳了此目錄,其他人無法刪除和覆蓋。 詳細: test使用者 屬於 sftp使用者組。 目錄ftp屬於sftp使用者組的test使用者。當然,使用者組sftp還有其他使用者。 root使用者上傳了新的檔案到ftp目錄下。碰到問題
Http multipart/form-data多引數Post方式上傳資料
關於multipart/form-data格式的上傳,網上有大量的解決文章,這裡,我們使用HttpURLConnection 來完成 POST /test HTTP/1.1 Accept-Language: zh-CN,zh;q=0.8 Accept:
C語言 如何用http post方式 上傳json資料
What :C語言 如何用post方式 上傳json資料. Piont:C語言Socket實現HTTP協議,json格式資料組包。 1,C語言Socket實現HTTP POST+json格式資料 按照HTTP協議傳送request。 http POST
使用最原始的http-post方式上傳圖片 ,上傳工具類已封裝 可直接使用
// 上傳工具類的 .h檔案 #import <Foundation/Foundation.h> @interface IMPhotoPostTool : NSObject + (NSMutableURLRequest *)upload:(NSString *
AJAX POST方式上傳檔案到後臺和下載後臺傳來的檔案
ajax 下載 原本ajax是不能下載檔案的,原因:因為response,一般請求瀏覽器是會處理伺服器輸出的response,例如生成png、檔案下載等,然而ajax請求只是個“字元型”的請求,即請求的內容是以文字型別存放的。檔案的下載是以二進位制形式進行的,雖然可以讀取到返
關於requests Post方式上傳檔案
背景 前兩天需要呼叫一個介面,使用post方式上傳檔案。於是使用Python的requests進行傳送post請求,但是一直報伺服器500的錯誤,感覺很納悶,折磨我好久之後才注意到之前使用的post請求只是攜帶一些欄位,而這次是需要向介面上傳檔案。 步驟 先這樣,,,再這樣,,,
將檔案通過http的post方法上傳到伺服器
這實際上是模仿瀏覽器的post行為,問題的提出是本人在做一個企業內部網路的專案的時候,該企業網路與Internet是通過一臺HP-UNIX的伺服器連線的,專案需要經常從網際網路傳送一些文字檔案到內部網路的一臺Web伺服器,我們只能夠通過那臺HP-UNIX的主機進去,當時內網
FastDFS的配置、部署與API使用解讀(2)以位元組方式上傳檔案的客戶端程式碼
本文來自 詩商·柳驚鴻 Poechant CSDN部落格,轉載請註明源地址:FastDFS的配置、部署與API使用解讀(2)上傳檔案到FastDFS分散式檔案系統的客戶端程式碼 在閱讀本文之前,請您先通過《FastDFS的配置、部署與API使用解讀(1)Get Start
ASP.NET 利用post方式上傳檔案
幾經努力,終於實現了檔案上傳,不使用asp.net元件,而使用傳統asp檔案模板方式,方法如下: 上傳檔案介面模板:(upfile.htm)HTML如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w
python 通過post方式上傳檔案到php伺服器
看了網上很多程式碼,都沒有說如何具體的使用poster,試了兩天,終於成功了 通過python呼叫php實現了檔案上傳 與大家分享一下: 首先要通過pip安裝poster(easy_install 也是一樣的):
Java的Post方式上傳檔案
不說廢話,直接上程式碼: public void moveWaterMark(String fileName) { try { File imgFile =
php5.6關於curl以@方式上傳檔案的變化及解決七牛上傳時報file is not specified in multipart的問題
$ch = curl_init (); $fields = $params; $fields ['file'] = '@' . $file; curl_setopt ( $ch, CURLOPT_URL, $u
vc++ socket http協議post方法上傳 分塊上傳
host www. UNC ket security mem packet 比較 content 分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net 最近
php使用新浪雲Storage儲存上傳下載檔案,建立bucket、Bucket 操作、Object 上傳操作,Object 下載操作,Object 刪除操作、Object 複製操作,生成一個外網能夠訪
<?php //新浪雲 Storage PHP use use sinacloud\sae\Storage as Storage; // 方法一:在新浪雲執行環境中時可以不傳認證資訊,預設會從應用的環境變數中取 $s = new Storage();
SharePoint REST API - 使用REST API和jQuery上傳一個檔案
本篇主要通過兩個程式碼示例來展示如何應用REST API和jQuery上傳檔案到SharePoint。 示例會使用REST介面和jQuery AJAX請求來將一個本地檔案新增到SharePoint文件庫並修改它的一些屬性。主要有以下幾個操作步驟: 1. 使用FileReader API將本地
使用json方式上傳圖片時,發現上傳成功後,變成下載了json... 或者無法解析到返回的結果集!!!
問題描述:如題 PS:使用Struts框架!!! 解決方案: <result name="typename" type="json"><param name="noCache">true</param><param name="
SpringMVC form表單 上傳一個檔案
前臺.jsp檔案 <body> <!--第一步:引入.js檔案 ajaxSubmit需要jquery.form.js--> <script type="tex
使用MFC的FTP時每次上傳一個檔案後就出錯解決辦法
用MFC的庫寫了個ftp上傳功能,先建立資料夾再上傳檔案,結果發現資料夾可以正常建立好,結果上傳檔案的時候每次只能傳一個檔案,之後程式就產生錯誤中斷。 可以確定的是本地通過其他ftp軟體訪問ftp伺服器是沒問題的,許可權也沒問題,可以建立檔案。 反覆的測試,結果都是隻能上傳