2011-06-03 63 views
1

我有一個perl程序,它用二進制數據寫入應用程序/ zip文檔。我可以在我的CGI腳本中執行以下代碼。PERL CGI:同時使用二進制和文本模式的文件句柄

print $cgi->header(-type=>"application/x-zip; name=\"$filename.zip\"", -content_disposition=> "attachment; filename=\"$filename.zip\""). "\n"; 
print $result 

其中$result是二進制數據。這一操作將輸出,提示用戶頁面下載zip

我想,雖然做的是傳遞整個「網頁」的形式參數,所以我這樣做:

open $resultfh, ">", \$output_buffer or die "could not open buffer"; 
print $resultfh $cgi->header(-type=>"application/x-zip; name=\"$filename.zip\"", -content_disposition=> "attachment; filename=\"$filename.zip\""). "\n"; 
print $resultfh $result 

,然後我可以通過$output_buffer作爲變量。

問題是,這不起作用,東西似乎得到通過,因爲我提示下載zipfile,但zipfile已損壞,我得到期望的字節和實際字節之間的不匹配或一些東西。

認爲這與二進制模式不是該輸出緩衝區做的,但我無法讀取二進制模式的內容頭,這樣我就可以有一個文件處理爲部分文字和部分二進制?

如果不是,我有什麼選擇?

編輯:這個問題實際上似乎發生在我將二進制數據作爲cgi形式參數傳遞時。任何人都知道問題可能是什麼?也許尺寸限制?

回答

1

將文件句柄設置爲使用二進制。當你需要打印一些你知道是「文本」的東西時,請明確地使用適當的行尾序列。例如,對於將在Windows上處理的數據:

binmode $handle; 
print $handle $some_text, "\r\n"; 
print $handle $some_binary_data; 
+0

謝謝!不幸的是沒有解決我的問題。看來問題在於傳遞二進制數據作爲參數。 – Atey1 2011-06-04 12:17:13

相關問題