2013-12-24 2 views
1

У меня небольшая проблема. Я использую LWP :: useragent и отправляю сообщение в другой скрипт. В этом скрипте я выполняю некоторую логику в строке json и нескольких файлах, переданных в анонимном массиве. Все шло хорошо, пока я не попытался нажать несколько файлов, которые я передавал в массив, и передать это как ссылку на массив в анонимном массиве.Ссылка на анонимный массив 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

Re: «Мне нужно, чтобы base64 закодировал файл?», Я не знаете, не так ли? – ikegami

+0

Ну, я все еще занимаюсь некоторыми исследованиями. Я ценю информацию, которую вы мне предоставили. Вы были очень полезны несколько раз. Насколько я понимаю, для передачи файла в json-строку мне нужно кодировать двоичные данные. И, к сожалению, это не вариант для меня. – kyle