Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl LWP直接从表单字段上载_Perl_Upload_Lwp - Fatal编程技术网

Perl LWP直接从表单字段上载

Perl LWP直接从表单字段上载,perl,upload,lwp,Perl,Upload,Lwp,我正在尝试让LWP上传在表单的文件字段中选择的文件 <input type ="file" name="file"> 并正确给出结果“testfile.xml” 使用cgi.pm上传这个值很好,但是我不能将它用于这个项目,使用LWP我无法让模块接受该文件 许多承诺在web上实现这一点的示例都不起作用,或者不再起作用。比如说- my $req = $browser=> POST('https://myserver.com/abc/', Content_Type => '

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

<input type ="file"  name="file">
并正确给出结果“testfile.xml”

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

许多承诺在web上实现这一点的示例都不起作用,或者不再起作用。比如说-

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将不胜感激

非常感谢:-)

问题是

$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],
]);

我不确定我是否理解这一点。你有一个带有上传表单的服务器,然后上传的文件应该由LWP上传到其他地方?我和BytePasher在一起,我不太明白你在这里想做什么。LWP不是CGI.pm的替代品。LWP用于编写web客户端;CGI用于处理web服务器上的请求。请澄清你想做的是什么。嗨,伙计们,回答一些问题。是的,一个带有上传表单的服务器,然后我必须向第三方API发送一个http请求,并选择一个文件,然后该文件会以JSON格式的回复进行响应。对于普通数据,这是一种非常常见的做法,但我很惊讶,没有简单的方法来处理文件。它以前似乎可以工作,但浏览器安全性意味着现在表单提交时没有发送路径。如果没有文件,就无法将文件从您的服务器发送到另一台服务器。该示例可以工作(我刚刚测试过),并且与浏览器更改无关,因为不涉及浏览器。远程网站上有一个文件上传表单;大多数用户会导航到
http://www.example.com/upload
在他们的浏览器中,选择要上载的文件,然后单击提交。作为一名精通Perl的黑客,您不想惹那么多麻烦,因此您可以编写一些代码,使用LWP::UserAgent为您提交表单,而无需打开浏览器。这就是这个例子的内容,如果你阅读了你所链接的书中的前一章,就会更清楚。谢谢你的回答,但遗憾的是,这不起作用——我明白你的逻辑。更改上述参数会产生与以前相同的响应。
my $req = $browser=> POST('https://myserver.com/abc/',
Content_Type => 'form-data',
Content => [ id => "123",
var => "var1",
file => [$file_absolute_path],
]);