上传二进制文件问题

时间:2010-11-09 12:56:51

标签: web-applications cgi

我有一个HTTP服务器(运行在Linux机器上的newLISP),它运行我的CGI脚本。它在我的Linux机器上运行。

使用POST方法上传文件时遇到一个奇怪的问题。我的CGI脚本很简单:它从stdin读取所有内容,并将其保存在文件中。我编写脚本用于调试目的:我想知道,究竟是什么读。

当我上传文本文件时,一切都很好。我的意思是我得到类似的东西:

-----------------------------18218802734725416881815749595
Content-Disposition: form-data; name="uploaded_data"; filename="post.gif"
Content-Type: image/gif

(and here's the content of the text file)

-----------------------------18218802734725416881815749595
Content-Disposition: form-data; name="text_field_name"

text field value
-----------------------------18218802734725416881815749595
Content-Disposition: form-data; name="submit"

Upload
-----------------------------18218802734725416881815749595--

根据RFC 1867(基于表单的HTML文件上传),这正是我应该得到的。 (是的,我将此文本文件重命名为“post.gif”。)

问题是,当我尝试上传任何二进制文件时,我得到了一些非常奇怪的东西。例如,当我上传gif图像时,我得到了这个:

-----------------------------208529943213031756281593958364

Content-Disposition: form-data; name="uploaded_data"; filename="polsl.gif"
Content-Type: image/gif

GIF89a_

造成这种奇怪行为的原因是什么?

1 个答案:

答案 0 :(得分:0)

看起来正在编写二进制字符串,并且编写器没有写出非打印字符。或者它正在写出来,你正在查看文件的任何编辑器正在过滤它们。在将数据写入文件之前,请尝试使用Base-64对您收到的数据进行编码,然后查看是否会发生变化。顺便说一句,所有GIF都以字符串GIF89a开头。