筆者今日在做web方面的開發(fā),包括客戶端和web服務端(使用C++語言)。涉及到文件的上傳和下載。下載簡單,瀏覽器來實現(xiàn)內(nèi)容解析和文件保存。上傳沒有找到解析web內(nèi)容的庫,所以自己動手解析了http上傳協(xié)議文本的內(nèi)容。主要就是字符數(shù)組的解析以及文件的保存。
懂得了上傳協(xié)議的格式之后,剩下的就沒有什么難度了。
文章結構如下:
1、上傳協(xié)議格式解剖
2、上傳插件選擇
3、C++服務端解析
1、上傳協(xié)議格式解剖
下圖是我要上傳的文件,是一個文本文件。這樣能較為清晰地說明。
文本共有6行,是我隨便寫的內(nèi)容。
下圖是web服務端接收到的協(xié)議的內(nèi)容,
將其標記一下,如下圖所示。其中紅框里面就是第一副圖上文本的內(nèi)容。綠框是協(xié)議格式的組成部分。
http協(xié)議規(guī)定,每一行之后要多增加一個'\n'和'\r',用來回車換行。每一行都有,下圖只綠框標識了三個而已。詳細的,可參考文章開頭推薦的兩篇博文知曉其原理。
根據(jù)業(yè)務需要,我要做的,就是將紅框中的內(nèi)容解析出來并保存成文件。當然,我上傳的是一個xls表格文件,但是原理是一樣的,只是實現(xiàn)起來,簡單的文本文件(只含數(shù)字和字母)能夠更為簡潔地處理。
2、上傳插件選擇
簡單提一下思路表單form中使用標記的類型有幾種表單form中使用標記的類型有幾種,有3種方案,
(1)直接使用form表單
(2)使用別人開發(fā)的html控件。如,,等。上傳的插件非常多,百度一搜索一大把。
(3)其他語言開發(fā)的網(wǎng)頁插件。如ocx等。
選擇時的考量點在哪里?
純web網(wǎng)頁是用html+css+js開發(fā)的,網(wǎng)上找的開源html控件也是如此。自己直接使用form表單,那就需要自己編寫css和js代碼,這樣也能讓網(wǎng)頁整體風格樣式相同。
用別人的控件css和js都是現(xiàn)成的,開發(fā)人員需要把它嵌入進來,就跟調(diào)用接口一樣。但是風格和樣式就無法能夠確保是否和自己的網(wǎng)頁相同了。
如果是用別的語言開發(fā)網(wǎng)頁插件則另當別論,開發(fā)的難度以及將插件向自己網(wǎng)頁的集成是費時費力的環(huán)節(jié)。但是如果你熟悉此而不了解web網(wǎng)頁開發(fā)的話,用這種方法也未嘗不可。
所以說,沒有哪種方案是萬能的,關鍵是依據(jù)自己的項目進行取舍。
我最后選擇的是,原因是使用簡單,樣式可控。
3、C++服務端解析了解了協(xié)議結構和原理之后,內(nèi)容解析的工作,對于開發(fā)C/C++的讀者你來講,就是很簡單的事情了。這里不再贅述。