我有一个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_
造成这种奇怪行为的原因是什么?
答案 0 :(得分:0)
看起来正在编写二进制字符串,并且编写器没有写出非打印字符。或者它正在写出来,你正在查看文件的任何编辑器正在过滤它们。在将数据写入文件之前,请尝试使用Base-64对您收到的数据进行编码,然后查看是否会发生变化。顺便说一句,所有GIF都以字符串GIF89a开头。