1
我目前正在從服務器上接收從客戶端上傳的圖像。客戶端可以通過http形式發送圖像,如下所示。通過http接收二進制數據
<form method="post" action="http://localhost:7074" enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit">
</form>
在我的服務器端,我遵循關於創建套接字和偵聽連接的beej教程。一旦從客戶端上傳的圖像,這是從緩衝區讀取我的服務器:
POST/HTTP/1.1
Host: localhost:7074
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.10 (maverick) Firefox/3.6.15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------13305569846927610321194789130
Content-Length: 3273
-----------------------------13305569846927610321194789130
Content-Disposition: form-data; name="myfile"; filename="0-adidas-logo.jpg"
Content-Type: image/jpeg
����
從接收到的數據,我推測,開始部分是HTTP頭和實際的二進制數據,我的形象是在「Content-Type:image/jpeg」之後。所以我打印了其餘的buf文件並保存爲jpeg文件,但是當我打開它時,出現錯誤「在狀態201中錯誤地調用jpeg庫。所以我想知道是否有任何問題我早先提到的,因爲我在這個階段打了一段時間的步驟。
請添加代碼有人能幫你。 是否按照http頭中收到的Content-Length字段保存到文件中(通常文件不是一次全部發送,而是分成幾個包)? – 2011-03-11 13:14:03
需要注意的一件事是HTTP標頭以\ r \ n結尾。確保你沒有將\ n或\ r \ n寫入jpeg。 – 2011-03-11 14:48:23
我強烈建議你使用庫來做到這一點,而不是寫你自己的。 – Ben 2011-04-02 06:49:47