LWP直接从表单字段上传

时间:2015-08-31 15:06:10

标签: perl upload lwp

我正在尝试让LWP上传在表单的文件字段中选择的文件。

<input type ="file"  name="file">

我选择一个名为testfile.xml的文件,将表单提交给脚本,使用

解析表单数据
my $filename = $query->upload("file");

并正确地给出结果“testfile.xml”

这个值使用cgi.pm上传得很好但是我不能将它用于这个项目,并且使用LWP我无法让模块接受该文件。

许多承诺在网络上执行此操作的示例不起作用或不再起作用。例如 -

my $req = $browser=> POST('https://myserver.com/abc/',
Content_Type => 'form-data',
Content => [ id => "123",
var => "var1",
file => [$filename],
]);

以上代码段生成

"Can't open file testfile.xml: No such file or directory", i.e. the path is not being read. 

如果路径提供如下

my $req = $browser=> POST('https://myserver.com/abc/',
Content_Type => 'form-data',
Content => [ id => "$id",
regexp => "$regex",
file => [/home/html/files/$filename],
]);

然后LWP上传,一切都很好所以我知道其他所有工作,但这个表单的用户将从硬盘驱动器上的任何位置选择文件,因此路径不能是固定值。

所以问题是有没有人知道如何使用html表单中的文件字段选择本地文件,提交表单并将其正确传递给LWP进行上传,而不首先上传到临时文件夹?

已经花了好几个小时在这上面并且接近找到一座高楼,所以任何有关驯服LWP的帮助都会非常感激!!

非常感谢: - )

1 个答案:

答案 0 :(得分:2)

问题在于

$filename 

仅包含文件名,而不包含提交文件的绝对路径。试试这个:

my $file_absolute_path = $query->param("file");

并将请求发送为:

my $req = $browser=> POST('https://myserver.com/abc/',
Content_Type => 'form-data',
Content => [ id => "123",
var => "var1",
file => [$file_absolute_path],
]);
相关问题