我該如何編寫一個Perl CGI腳本,該腳本通過HTTP帖子接收文件並將其保存到文件系統中?如何處理HTTP文件上傳?
4
A
回答
7
只是一個注意事項:但是你會寫它,不要保存在一個可從您的網絡服務器訪問的地方。
現在到了一個地步:下面是我用了一段時間的照片上傳的腳本。它可能需要一些調整,但應該告訴你方式。
由於圖像沒有上傳到web-accesible目錄,因此我們有單獨的進程檢查它,調整大小,放置水印並將其放置在可以訪問的位置。
#!/usr/bin/perl -wT
use strict;
use CGI;
use CGI::Carp qw (fatalsToBrowser);
use File::Basename;
$CGI::POST_MAX = 1024 * 5000;
my $safe_filename_characters = "a-zA-Z0-9_.-";
my $upload_dir = "/home/www/upload";
my $query = new CGI;
my $filename = $query->param("photo");
my $email_address = $query->param("email_address");
if (!$filename)
{
print $query->header ();
print "There was a problem uploading your photo (try a smaller file).";
exit;
}
my ($name, $path, $extension) = fileparse ($filename, '\..*');
$filename = $name . $extension;
$filename =~ tr/ /_/;
$filename =~ s/[^$safe_filename_characters]//g;
if ($filename =~ /^([$safe_filename_characters]+)$/)
{
$filename = $1;
}
else
{
die "Filename contains invalid characters";
}
my $upload_filehandle = $query->upload("photo");
open (UPLOADFILE, ">$upload_dir/$filename") or die "$!";
binmode UPLOADFILE;
while (<$upload_filehandle>)
{
print UPLOADFILE;
}
close UPLOADFILE;
print $query->header ();
print <<END_HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Thanks!</title>
</head>
<body>
<p>Thanks for uploading your photo!</p>
</body>
</html>
END_HTML
6
9
使用CGI module。
my $fh = $query->upload('upload_field');
while(<$fh>) {
print SAVE_FILE $_;
}
4
我會用CGI和閱讀CREATING A FILE UPLOAD FIELD,並使用open創建文件和print寫信給它啓動。 (然後close關閉它)。
相關問題
- 1. 如何在HTTP中處理文件上傳?
- 2. 我如何處理文件上傳?
- 3. 如何處理文件上傳名稱
- 4. PHP處理文件上傳
- 5. 需要幫助處理XML HTTP文件上傳請求
- 6. 使用akka-http websockets上傳和處理文件
- 7. 通過http處理上傳文件的python腳本
- 8. 通過HTTP處理文件上傳的最佳方式
- 9. 如何處理從Java客戶端上傳的服務器端HTTP文件
- 10. 如何將文件上傳到http處理程序ashx中的網絡路徑?
- 11. 關於Apache如何處理文件上傳的任何文檔?
- 12. 如何取代Angular2 Http上傳文件?
- 13. 如何讓Angular2 Http上傳文件?
- 14. 如何設置jQuery文件上傳?如何實現上傳處理程序?
- 15. 如何使用apache-camel restlet組件處理文件上傳?
- 16. 何處上傳hdfs文件?
- 17. 處理文件上傳保存
- 18. 上傳和處理文件ASP.NET MVC 3
- 19. PHP:重新處理上傳的文件
- 20. MaxUploadSizeExceededException處理但文件仍然上傳?
- 21. 使用Django處理上傳的文件
- 22. 處理文件上傳在Heroku
- 23. 在Drupal中處理文件上傳
- 24. Angular JS文件上傳內容處理
- 25. Alfresco無法處理文件上傳
- 26. 在SVN中處理文件上傳
- 27. 命令批處理文件curl上傳
- 28. PHP處理多個文件上傳EASY
- 29. 反應js處理文件上傳
- 30. django admin上傳的文件處理
在perl5.6及更高版本中,可以將文件打開模式從文件名中分離出來,使其更「安全」,例如打開(my $ fh,「>」,$ file_name)或者「無法打開$ filename :$!「。在5.8及更高版本中,您甚至可以使用「 - |」或「| - 」,並使用數組作爲更安全的fork/execs的剩餘參數。 – runrig 2008-10-02 15:16:48