2017-06-15 61 views
1

我已經打了一堵牆,我的谷歌技能有這段時間失敗了我。我正在學習mojolicious,爲我經常使用的一系列Perl腳本創建一個有用的前端。我有很長的一段路要走,但是當文件總數達到950時,我很難上傳(多個)文件。多個文件上傳與mojolicious在大量的文件上失敗

此前,我遇到了以下問題 - 在多個文件上傳中,文件將開始被上傳,但一旦文件大小達到16 MB,上傳停止。我通過設置$ ENV {MOJO_MAX_MESSAGE_SIZE} = 50000000000來解決這個問題。但是,這個問題是不同的。爲了說明這一點,這是我的腳本的一部分,我試圖抓住上傳的文件:

my $files = $self->req->every_upload('localfiles'); 
for my $file (@{$files}) { 
    my $fileName = $file->filename =~ s/[^\w\d\.]+/_/gr; 
    $file->move_to("temporary_uploads/$fileName"); 
    $self->app->log->debug("$fileName uploaded\n"); 
    push @fileNames, $fileName; 
}; 
say "FILES: ".scalar(@fileNames); 

我道歉,它可能是醜陋的。如果我嘗試上傳949個文件,我的數組@fileNames填充正確,但是如果我嘗試上傳950個文件,我的數組最終會變空,而且好像$文件也是空的。如果任何人有任何想法或指引來指導我解決方案,我將非常感激!

+3

是否有另一臺服務器包裝你的Mojolicious應用程序?該服務器可能有一個請求大小上限,您可能會或可能無法更改。 [這是nginx的例子](https://www.cyberciti.biz/faq/linux-unix-bsd-nginx-413-request-entity-too-large/)。 – mob

+1

服務器可以處理多少4.99 GB的上傳? –

+0

@mob感謝這裏的提示 - 看起來mojo可以使用一個名爲hypnotoad的服務器,雖然我不確定在我的情況下是否已將其初始化爲其他實例,我發現有人使用它,但它似乎已被專門聲明。我會探討這一點 - 謝謝。 – user1597452

回答

1

如果我試圖上載949個文件,我的陣列@fileNames正確填充,但如果我嘗試上傳文件950,我的數組結束了空,卻彷彿$files是空也。

這意味着進程將耗盡文件描述符。特別是,Linux內核默認是1024

例如,內核默認(ulimit -n)的文件描述符的最大數量1024/1024(軟,硬),而在Linux 2.6已經提升到1024/4096 0.39。