2010-11-09 238 views
1

我有一個運行我的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_

什麼可以爲這種奇怪的行爲的原因?

回答

0

它看起來像是正在寫入二進制字符串,並且寫入程序不會寫出非打印字符。或者它將它們寫出來,無論您正在查看文件的任何編輯器正在過濾它們。在將它寫入文件之前,嘗試使用Base-64對您收到的數據進行編碼,然後查看是否改變了這些內容。順便提一句,所有的GIF都以字符串GIF89a開頭。