Perl Dancer:从浏览器中读取文件

时间:2015-04-06 17:40:45

标签: regex perl perl-module dancer

使用Perl Dancer,我打算从浏览器中读取文件,对数据进行一些处理并将新数据发回给用户。但是,我无法从文件句柄中读取数据。

另外,请您告诉我们如何将数据发回给用户?

HTML:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>CSS Registration Form</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <link rel="stylesheet" type="text/css" href="css/default.css"/>
</head>
<body>  
    <form method="POST" class="register">
       <p> Please select a file to upload:
           <BR> <INPUT TYPE="FILE" NAME="tfile">
       </p>         
    </form>
</body>

Testing_app.pm:

package Testing_App;
use Dancer ':syntax';
our $VERSION = '0.1';
get '/' => sub {
    template 'index.tt';
};
post '/' => sub {    
    my $tp = params->{fname};
    my $tv = params->{vname};
    my $tf = params->{tfile};
    open(LOCAL, ">tp.lst") or die $!; 
    open(FN, "<$tf") or die $!; 

    while (<$tf>) {
        print LOCAL $_; 
    }
    template 'first.tt', { su => $tp, sv => $tv, sw => $tf };
};
true;

你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

Dancer::Request::Upload的文档中有一个如何处理文件上传的示例:

# somewhere in your view:
<form action="/upload" method="POST" enctype="multipart/form-data">
  <input type="file" name="filename">
  <input type="submit">
</form>
# and then in your application handler:
post '/upload' => sub {
  my $file = request->upload('filename');
  $file->copy_to($upload_dir);  # or whatever you need
};

请注意,该示例使用/upload作为实际发布文件数据的路由。 (创建两个只在请求方法上有所不同的/路由会让人感到困惑。)

另请注意,表单元素的name属性必须与传递给request->upload()的值相匹配(在本例中为filename)。