使用lighttpd上传和存储文件



我在嵌入式平台的Linux上运行lighthttpd。

现在我想让它有可能传输文件到系统,与上传网页包含一个文件选择器和"Upload"按钮(带有HTML标签和)。所选文件作为POST HTTP请求传输,其中包含multipart/form-data。然后,该文件应该简单地作为常规文件存储在文件系统中。

我已经有一个CGI接口,一个bash脚本接收请求,并将其传递到后端c++应用程序。因为它是一个嵌入式平台,我想避免使用php, python等只在这种情况下。

据我所知,lighttpd不能将接收到的文件直接从多部分编码的请求体保存到纯文件,正确吗?

为了解码正文,我从mpack包中找到了'munpack'工具,它将编码的正文写入磁盘上的文件,但用于mime编码的电子邮件。尽管如此,我可以在CGI bash脚本中调用它,它几乎像预期的那样工作,除了它不能处理终止边界id(在"Content-Type"中给出的边界id由两个破划线追加),导致最后一个文件仍然包含最终边界。更新:这个munpack行为来自一个错误的脚本,但它仍然不起作用,当正文包含CRLF行结尾时,munpack产生错误的文件;只有LF能产生正确的结果。

是否有其他直接请求到磁盘上的文件的方法?或者我真的必须在脚本中手动过滤掉终止边界,或者在我的c++应用程序中编写多部分消息解析器?

为了使用例更清楚:用户应该能够将固件文件上传到我的系统。因此,他通过网络浏览器连接到我的系统,接收到一个上传页面,在这个页面上他可以选择文件,然后用"上传"键发送文件。按钮。然后,这个传输的文件应该存储在我的系统中。用于接收请求的CGI脚本已经存在(以及我可以处理请求的c++后端),唯一的问题是将多部分/表单数据编码的文件转换为磁盘上的普通文件。

现在我想通过POST HTTP请求将文件传输到系统。该文件应该简单地作为常规文件存储在文件系统中。

这听起来更像是HTTP PUT而不是HTTP POST。

据我所知,lighttpd无法将接收到的文件直接从多部分编码的请求体保存到纯文件,正确吗?

你是说application/x-www-form-urlencoded with POST吗?为什么multipart-encoded ?是否有多个文件正在上传?

lighttpd mod_webdav支持PUT。否则,您需要自己的程序来处理请求体,无论是shell脚本还是编译后的程序。您可以在c++中使用libcgi,或者您可以查看lighttpd用于测试的C程序,这些程序在&lt中实现了FastCGI和SCGI;C各300行

相关内容

  • 没有找到相关文章

最新更新