我看过多篇关于不同方法的帖子all over Internet,但我仍然找不到合适的答案。
问题:我的CGI应用程序在嵌入式Web服务器中运行,我使用的语言是C,而我正在尝试处理的是使用表单的POST请求发送的文件。
到目前为止,应用程序一直在做所有事情而不使用任何库,但现在我需要添加这个函数,我真的不知道可以使用哪个库来执行此操作。对于这样一个简单的目标而言,从头开始这样做似乎太复杂了。可能不是因为技术含义,而是针对浏览器之间可能出现的偏差。
有关它的任何建议吗?
编辑:我希望能够从浏览器发布文件,我想避免使用多部分内容类型,因为这是开销......
答案 0 :(得分:2)
要使用<input type="file">
在浏览器中上传文件,必须使用enctype="multipart/form-data"
。这是不可协商的 - 文件输入根本不能使用默认的表单编码(application/x-www-form-urlencoded
)。
如果可以,我强烈建议使用Perl的CGI
模块来解析上传内容。但是,如果您完全坚持使用C语言,则可能需要尝试类似https://github.com/iafonov/multipart-parser-c的内容。
答案 1 :(得分:0)
我写过一台服务器就是这样做的。您将从此发布请求中收到的数据包只是数据。它将被格式化为POST,这意味着会有一些信息,如
HTTP:POST 像版本一样的东西 数据:您的数据
您只需扫描,直到看到数据:或表示发布请求的某个标题,然后您复制此数据。这将是你的文件/参数/在帖子中发送的任何内容。它不会在url中(它有自己的标题部分)
编辑:帖子标题示例
POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
home=Mosby&favorite+flavor=flies -> This is your data (this happens to be arguments home and favoriteflavor