我正在尝试让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的帮助都会非常感激!!
非常感谢: - )
答案 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],
]);