2017-09-23 112 views
1

我有一個在10BASE-T以太網(CS8900)和基於EasyWeb項目的Tcp/IP實現的微型16位微控制器(St10)上運行的裸機應用程序。如何提供一個網站作爲單個文件?

有一個小型網絡服務器實現顯示設備的一些狀態信息,也允許更改設置等。

對於瀏覽器訪問,Web服務器提供了像index.html*.css*.js*.svg*.png等一些文件。

由於裸金屬目標沒有像SD卡那樣的存儲介質,因此我將上面提到的所有資源都放到編譯後的二進制文件中。

爲了節省內存和減少流量,我把所有的文件放在一起使用壓縮,並讓我的網絡服務器使用Content-Encoding: gzip來傳遞。

將所有文件合併到一個單獨的index.htm的步驟目前是手動工作(包括替換文件名引用等)。可能有一種工具會自動執行此操作?

或者,我可以將zip/tar /不管所有文件壓縮成單個文件,並在http請求時傳遞這個文件嗎?

編輯2017年10月5日

通過使用由brain99提到inliner解決。

有小的麻煩使得它在運行Kubuntu的16.04主機,但最終通過安裝固定它:

sudo apt-get install nodejs 
sudo ln -sT "$(which nodejs)" /usr/local/bin/node 
sudo apt-get install npm 
sudo npm install -g inliner 

也許,我會得到通過​​代替nodejs去掉符號鏈接(沒試過)。 已經安裝了之後,我只需要運行:

inliner index.html >index-backed.html 
gzip -c index-backed.html >index.html.gz 
+0

爲你工作一個單一的[去](https://golang.org)二進制是Web服務器,也包含你的靜態內容? – nbari

+0

嗯,我已經有一個http服務器實施包括。用戶管理,摘要訪問認證,會話管理,動態內容生成(例如,設備狀態爲yaml)等等。 Go的方法聽起來像是對它們全面更新,不是嗎? – Joe

+0

是的,所以也許不是你要找的東西,因爲像你這樣適當提及它意味着重做一切。 – nbari

回答

2

選項1:透過Chrome

有一組兩個Chrome擴展,讓您的網頁保存到一個HTML文件:

第二個擴展是第一個擴展需要的幫助擴展。我沒有對此進行測試,但它似乎在Chrome網上商店中有相當好的評價(顯然它可能會在複雜的頁面上窒息)。

通過這些擴展,您應該能夠在Chrome中打開頁面,並使用擴展名將其保存爲具有嵌入式CSS /腳本/圖像的單個文件。

選項2:編寫腳本

如果你想在一個腳本自動化的東西,還有一個project on github正是爲,可通過NPM安裝。

+0

聽起來不錯。你知道是否還有命令行界面,以便我能夠將它集成到我的開發工具鏈中? – Joe

+0

[inliner](https://github.com/remy/inliner)完全符合我的需求! – Joe

0

我有點困惑你想要做什麼,但我猜你需要一種方法來節省一些存儲,一件事,你也許可以嘗試在Google Drive存儲一些文件?這樣,你就不必擔心在那裏的文件,你只需上傳你的圖片,並從驅動器拉他們是這樣的:

<img src="https://drive.google.com/uc?export=download&id=YOUR_FILE_ID"> 

當然與實際文件ID替換YOUR_FILE_ID,獲得通過使用Google雲端硬盤的分享鏈接。就像這樣:

https://drive.google.com/file/d/YOUR_FILE_ID/view?usp=sharing

我會覺得這比荏苒一個更好的解決方案,但選擇是你的,希望這可以幫助你!

+0

我的設備沒有全部網絡連接。在某些情況下,只有我的裸機設備和通過例如PC連接的PC /筆記本電腦。以太網。 – Joe

相關問題