2013-12-24 44 views
1

我遇到了一個小問題。我正在使用LWP :: useragent併發布到另一個腳本。在該腳本中,我正在執行json字符串和匿名數組中傳遞的多個文件的一些邏輯。一切都很順利,直到我試圖推送我傳入數組的多個文件並將其作爲匿名數組中的數組引用傳遞。包含數組引用的Perl LWP匿名數組引用作爲具有單個元素的數組出現在數組中

open (IMAGE, "./flower.jpg") or die "$!"; 
open (IMAGE2, "./fw4.pdf") or die "$!"; 

$raw_string1 = do{ local $/ = undef; <IMAGE>; }; 
$raw_string2 = do{ local $/ = undef; <IMAGE2>; }; 


my @file_array; 

push(@file_array, $raw_string1); 
push(@file_array, $raw_string2); 

my $array_ref = \@file_array; 

my $data = [json_string => $json, file_array => $array_ref]; 
my $ua = LWP::UserAgent->new; 
$res = $ua->request(POST($url, $data)); 

在catch腳本上,我讀取了從匿名傳遞給散列的參數。我能夠訪問JSON字符串傳遞沒有問題,如:

my $json_post = $params{'json_string'}; 

然後,我將其解碼和我不希望它是什麼這一切都很好。所以,我想我可以訪問數組引用,如:

my $array_ref = $params{'file_array'}; 
my @array = @$array_ref; 

也試過

my @array = @{$array_ref}; 
+0

您正在爲現有服務器編寫客戶端,還是您正在設計服務器?在前一種情況下,規格是什麼?在後一種情況下,您有什麼要求? – ikegami

+0

服務器已經存在。我不確定規格是什麼,我是新手,無法訪問。我什至不能猜測規格可能是什麼。 – kyle

+0

那你如何期望提供它想要的? – ikegami

回答

2

只能通過套接字發送的字節一個流。其他任何東西都必須被序列化爲一個字節流並在遠端進行反序列化。

您選擇使用application/x-www-form-urlencoded協議進行序列化。它只能序列化字符串的鍵值對。然而,你嘗試通過一個參考

您需要按照服務器預期的方式將數組內容序列化爲字符串。

+0

我寧願使用JSON。如果我確實使用JSON,我必須對base64進行編碼嗎?我確實有這個工作的版本很好,但我確實是base64編碼。我被告知不要這樣做,並且還要將參數作爲表單變量傳遞。我相信我被告知不要這樣做的原因是因爲我們期望(最終)有數百個文件的可能性,並且在某些情況下需要多個mb pdfs – kyle

+0

「我必須對base64進行編碼嗎?」,我沒有知道,是嗎? – ikegami

+0

那麼,我仍然在做一些研究。我很欣賞你提供給我的信息。你現在已經有很多幫助。據我所知,爲了在json字符串中傳遞文件,我必須對二進制數據進行編碼。不幸的是,這不是我的選擇。 – kyle

相關問題