2012-07-06 54 views
2

我有一个奇怪的问题,同时使用WWW::Mechanize上传西里尔名称的文件。该文件上传正确,但名称被破坏(我只在目标网站上看到??????)。WWW :: Mechanize给出了损坏的上传文件名

代码很简单:

use WWW::Mechanize; 
use Encode qw(from_to); 

my $config = { 

    login   => "login", 
    password  => "pass", 
    source_folder => "$Bin/source_folder", 
}; 

my $mech = WWW::Mechanize->new(autocheck => 1); 
$mech->agent_alias("Windows IE 6"); 

$mech->get("http://www.antiplagiat.ru/Cabinet/Cabinet.aspx?folderId=689935"); 
authorize($mech); 

$mech->submit_form(

    form_number => 1, 
    fields  => {}, 
    button => 
'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$FolderControl_StdFolder_0$DocumentsGrid$btnAddItem', 
); 

find(\&wanted, $config->{source_folder}); 

sub wanted { 

    return unless -f; 

    say $config->{source_folder} . "/" . $_; 

    #from_to($_, "CP1251", "UTF8"); doesn't work too :-(

    my $mech = $mech->clone(); 
    $mech->submit_form(

     form_number => 1, 
     fields  => { 

      'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$fuDocumentUpload' => 
       $config->{source_folder} . "/" . $_, 
     }, 
     button => 'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$btnCommitUpload', 
    ); 
} 

如果我从CP1251到UTF8编码的文件名,然后上传不起作用。请帮我找到一个解决方案。

回答

1

下面是解决方案,我用:

my $filename = $_; 
    from_to($filename, "CP1251", "UTF8"); 

    my $mech = $mech->clone(); 

    my $form = $mech->form_number(1); 
    $mech->field('ctl00$ctl00$Body$MainWorkSpacePlaceHolder$fuDocumentUpload', 
     $config->{source_folder} . "/" . $_); 
    $form->find_input(
     'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$fuDocumentUpload')->filename($filename); 
    $mech->submit_form(

     form_number => 1, 
     button => 'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$btnCommitUpload', 
    );