我正在尝试将文件POST到webapp端点。问题是在同一个请求中我需要将数组包含为其中一个参数的值。
my $ua = LWP::UserAgent->new();
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
targetLang => 'french',
]);
工作正常。
然而,当我尝试
时my $ua = LWP::UserAgent->new();
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
targetLang => ['french','spanish],
]);
我得到了
无法打开文件法文:C:/Strawberry/perl/site/lib/HTTP/Request/Common.pm第154行没有此类文件或目录。 HTTP :: Request :: Common :: form_data(ARRAY(0x6800698),undef,HTTP :: Request = HASH(0x6803a70))在C:/Strawberry/perl/site/lib/HTTP/Request/Common.pm第67行调用
似乎Perl认为使用语言的数组引用是一个文件。
我做错了什么?
根据Matt的答案扩展分辨率:我最初忘记提及,语言列表来自用户输入,所以我最终做了类似的事情:
my @languages = (targetLang => 'french', targetLang => 'spanish');
my $ua = LWP::UserAgent->new();
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
@languages,
]);
答案 0 :(得分:5)
可以通过重复字段来指定多值表单字段 name或将值作为数组引用传递。
POST方法还支持用于的
multipart/form-data
内容 基于表单的文件上载,如RFC 1867中所述。触发此操作 通过将内容类型'form-data'
指定为其中一个来实现内容格式 请求标头。如果$form_ref
中的某个值是数组 参考,然后它被视为文件部件规范......
因此,虽然您通常可以使用数组引用指定多值字段,但数组引用对multipart/form-data
内容具有特殊意义,您可能必须通过重复字段名称来解决它:
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
targetLang => 'french',
targetLang => 'spanish',
],
);