2012-04-14 20 views
10

私は、PerlベースのMojolicious Webフレームワークを試しています。そして私はLiteの代わりに完全なアプリケーションを開発しようとしています。私が直面している問題は、サーバーにファイルをアップロードしようとしていることですが、以下のコードは機能しません。どのようにMojoliciousを使用してファイルをアップロードしますか?

私には何が間違っているか教えてください。また、ファイルがアップロードされる場合は、アプリケーションのパブリックフォルダまたは他の場所にあります。

ありがとうございます。

sub posted { 
my $self = shift; 
my $logger = $self->app->log; 

my $filetype = $self->req->param('filetype'); 
my $fileuploaded = $self->req->upload('upload'); 

$logger->debug("filetype: $filetype"); 
$logger->debug("upload: $fileuploaded"); 

return $self->render(message => 'File is not available.') 
    unless ($fileuploaded); 

return $self->render(message => 'File is too big.', status => 200) 
    if $self->req->is_limit_exceeded; 

# Render template "example/posted.html.ep" with message 
$self->render(message => 'Stuff Uploaded in this website.'); 
} 
+0

私はMojoliciousの中:: Liteのドキュメントコールに '$自己> req->アップロード()は'ラップされていることを見ています'if()'では、アップロードがあると仮定する前に戻り値がチェックされていることを意味します。そうすることは、openの戻り値をチェックすることと等価です。 – DavidO

答えて

8

(まず、あなたはmethod="post"enctype="multipart/form-data"、およびname="upload"input type="file"で一部のHTMLフォームが必要です。念のために。)

エラーが発生しなかった場合は、$fileuploadedMojo::Uploadだろう。次に、サイズとヘッダーを確認したり、スラップしたり移動したりできます($fileuploaded->move_to('path/file.ext'))。

から取られたstrange example

+0

ありがとうございましたmenozero、HTML部分はあなたが言及したのと同じです。私は提供されたリンクを通過しましたが、Mojolicious :: Liteと完全なアプリケーションに基づいて開発しています。そして、私のケースでは、 '$ fileuploaded'は空の値を持っているので、現在何がうまくいかないのか分かりません。 –

+0

私のために完璧に動作します。ありがとうたくさんのmenozero!これはKunal Jhaの解決策として受け入れられるべきです。彼からの問題はどこか他の場所にあります... –

+0

ダウンロードするファイルを提供するためにどのライブラリを見ますか? – user1876508

0

あなたはMojoliciousのを使用することができます:: Pluginの:: RenderFile

Mojolicious::Plugin::RenderFile

+3

あなたがリンクしたドキュメントによると、RenderFileはストリーミングダウンロード用であり、アップロード用ではありません。 –

関連する問題