2017-09-23 73 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

相关问题