上传二进制文件问题
问题描述:
我有一个运行我的CGI脚本的HTTP服务器(运行在Linux机器上的newLISP)。它运行在我的Linux机器上。上传二进制文件问题
我有一个使用POST方法上传文件的奇怪问题。我的CGI脚本很简单:它从标准输入读取所有内容,并将其保存在文件中。我为了调试目的而编写脚本:我想知道,究竟是读什么。
当我上传一个文本文件时,一切都很好。我的意思是,我得到类似的东西:
-----------------------------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_
什么可以为这种奇怪的行为的原因?
答
它看起来像是正在写入二进制字符串,并且写入程序不会写出非打印字符。或者它将它们写出来,无论您正在查看文件的任何编辑器正在过滤它们。在将它写入文件之前,尝试使用Base-64对您收到的数据进行编码,然后查看是否改变了这些内容。顺便提一句,所有的GIF都以字符串GIF89a开头。