thttpd的檔案上傳

2021-06-13 05:44:59 字數 1325 閱讀 9968

在後期需要增加檔案上傳功能,經過檢查發現,thttpd中沒有這個功能,所以需要新增上來,基於本身的框架,很快就加上來了,以下是對httpd協議檔案上傳的理解過程,做一記錄。

httpd協議以文字字串為命令組織,檔案上傳以post方式提交內容。以下為工作中用到的http協議內容,其實還有很多其它的沒有用到,在此不做討論

《這裡是要上傳的檔案內容》

-------------------------8cff3a9221c298b--

各域的說明:

首先注意的是,上面的幾行中,四個回車換行符不能少的,即必需存在,各資訊塊之間必需使用空行隔開。

content-type,普通的請求,其值為 text/xml,而檔案上傳時,其值的格式為:multipart/form-data; boundary=---------------------8cff3a9221c298b,其中boundary的值是乙個隨機生成的分隔符,在後面以此分隔符表示各域的內容。

content-length,本次post提交的內容的長度,是除了httpd頭之外的所有內容的長度,也包括分隔符在內,所以對於實際檔案的長度,伺服器必需通過計算來獲取得,在本字段的值的基礎之上,把分隔符及後面的那些頭以及最後的[回車換行-分隔符-回車換行]的長度都除去才是最終的檔案內容長度。

第乙個空行之後的「-----------------------8cff3a9221c298b」,即是boundary的值,但和這個值相比,前面多了兩個"--",即多了2個位元組,後面的行指明上傳檔案的狀況,比如檔名(沒有包含路徑)。在本分隔符的域之後,加上回車換行之後,開始真正的檔案內容。

最後的分隔符「-------------------------8cff3a9221c298b--」,這裡必需注意的是它的長度,除去回車換行符之後,如果boundary的值是"a",則第乙個分隔符是「--a」,而這個結束的分隔符是「--a--」,通過多次對比,才發現了這個不同。

如果是網頁上的form提交,則這個分隔符好像是多個,有多少個字段就有多少個分隔符把它們分開,都在檔案內容的前面,每個分隔符的前面都有空行間隔。

由於http協議是文字格式,所以其協議中的空行非常重要,從收到的內容開始算,到第乙個空行為止,為總的httpd協議頭,其中可以包含很多的內容,而有post時,則後面的內容又可能被分成多個子域來容納不同的資訊

檔案的上傳

1.sms.ejs 提交提交 2.路由攔截 const uploadfilectrl require controller uploadfilectrl 檔案上傳,myfile input框的name值 router.post uploadfile.do upload.single myfile u...

檔案的上傳

頁面處理頁面 思路 點選上傳檔案,檔案已經暫時儲存在預設路徑下。為了安全及其他需要所以要對所上傳檔案加以控制。並長期儲存。1.控制上傳檔案的型別 2.控制上傳檔案的大小 3.防止檔名重複 修改儲存的檔名 使用者名稱 時間戳 隨機數 檔名 流水號 使用資料夾 4.儲存檔案 echo files fil...

php mysql上傳檔案 PHP 檔案上傳

通過 php,可以把檔案上傳到伺服器。建立乙個檔案上傳表單 允許使用者從表單上傳檔案是非常有用的。請看下面這個供上傳檔案的 html 表單 芝麻教程 web3.xin 檔名 將以上 儲存到 form.html 檔案中。有關上面的 html 表單的一些注意項列舉如下 標籤的 enctype 屬性規定了...