本文內容概要:詳細描述了在goAhead 2.5上如何實現文件上傳(上傳文件)到伺服器端的功能。
開發環境:
宿 主 機:Windows XP;
虛 擬 機:Ubuntu 9.10;
交叉編譯器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以順利編譯通過)
———————————————————————————————————
1. 說明
最近調試web文件上傳到伺服器功能,但在調試時,處理函數總是獲取不到文件路徑,百思不得其解,查了網上許多文章,但大多提到的是前端文件上傳的原理、實現方式等,而未提供伺服器端處理的實現(利用C函數實現)。此外,由於對web不了解,花了些時間研究web程序。
2. goAhead實現文件上傳的方法
總得來說,goAhead上實現文件上傳功能是比較容易的。因為有現成的代碼可用,稍微移植下即可。
2.1 實現原理
使用html form即表單提交文件上傳請求,web伺服器核心處理接收客戶端Post過來的文件數據(注意post的是二進位數據),最後,web伺服器把接收到文件數據以二進位格式寫到伺服器本端存儲系統。
2.2 前端設計
前端設計比較簡單,就是設計一個form,type屬性為file,本人是在goAhead-2.5附帶的wwwdemo的asptest.asp網頁上增加了一個這樣的form。
- <html>
- >
- <head>
-
-
-
- <link rel="stylesheet" href="/style/normal_ws.css" type="text/css">
- <% language=javascript %>
-
- function uploadFileSubmit()
- {
- // alert(document.getElementById("document.softupdate"));
- return;
- }
-
- head>
-
- <body>
-
- <h1>ASP / JavaScript? Testh1>
- <h2>Expanded ASP data: <% aspTest("Peter Smith", "112 Merry Way"); %>h2>
-
- <P>
- <% var z; \
- for (z=0; z<5; zz=z+1) \
- { \
- if (z<=2) \
- write(z+" is less than 3<br>"); \
- else if (z==3) \
- write(z+" is equal to 3<br>"); \
- else \
- write(z+" is greater than 3<br>"); \
- } \
- %>
- P>
-
-
-
-
- <span style="color:#3333ff;">
- <h1>GoForm upload file testh1>
- <form id="softupdate" action=/goform/formUploadFileTest method=POST enctype="multipart/form-data">
- <table>
- Select file: <td> <input id="fileupload" type="file" name="fileupload" size=60 value=""> td>
- <td> <input id="fileuploadsubmit" type="submit" name="update" value="update" onClick="uploadFileSubmit()"> td>
- table>
- form>
-
-
- span>
-
- body>
- html>
其中,enctype參數用來設置表單的MIME編碼方式,在進行文件(或同時包含文本框)上傳時,必須將其屬性設置為"multipart/form-data";formUploadFileTest 是web伺服器定義的一個處理函數,用於把web伺服器接收到的上傳文件數據寫到存儲系統。