كيف يمكنني التعامل مع الملفات HTTP الملفات المرفوعه ؟

StackOverflow https://stackoverflow.com/questions/162677

  •  03-07-2019
  •  | 
  •  

سؤال

كيف يمكنني أن أكتب Perl CGI script أن يتلقى الملفات عبر HTTP post ويحفظ هذا الملف ؟

هل كانت مفيدة؟

المحلول

ومجرد ملاحظة: ولكن هل سوف يكتب عليه، على لا حفظ ذلك في مكان يسهل الوصول إليه من خادم الويب

والآن إلى هذه النقطة: أدناه هو السيناريو الذي كنت تستخدم لبعض الوقت للصور التحميل. قد تحتاج الى بعض التغيير والتبديل، ولكن يجب أن تظهر لك على الطريق.

وكما إيسنت الصور التي يتم تحميلها إلى الدليل 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

نصائح أخرى

واستخدم CGI حدة .

my $fh = $query->upload('upload_field');
while(<$fh>) {
  print SAVE_FILE $_;
}

سأبدأ باستخدام CGI و القراءة إنشاء ملف مجال تحميل, و باستخدام فتح لإنشاء ملف ، طباعة الكتابة إلى ذلك.(ثم قريب لإغلاقه).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top