index.cgi 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/perl
  2. # Upload files to server
  3. # See also:
  4. # https://www.w3schools.com/php/php_file_upload.asp
  5. # https://www.geeksforgeeks.org/how-to-select-multiple-files-using-html-input-tag/
  6. use utf8;
  7. use 5.018;
  8. use strict;
  9. use autodie;
  10. use CGI qw(:standard -utf8);
  11. #use CGI::Carp qw(fatalsToBrowser);
  12. binmode(STDOUT, ':utf8');
  13. print header(-charset => 'UTF-8'),
  14. start_html(
  15. -lang => 'en',
  16. -title => 'Upload files',
  17. -base => 'true',
  18. -meta => {
  19. 'keywords' => 'upload files to server',
  20. 'viewport' => 'width=device-width, initial-scale=1.0',
  21. },
  22. -style => [{-src => 'css/main.css'}],
  23. -script => [],
  24. );
  25. print h1("Upload files");
  26. print start_form(
  27. -method => 'POST',
  28. -enctype => 'multipart/form-data',
  29. -action => 'index.cgi',
  30. ),
  31. q{<input type="file" name="uploaded_file" multiple>},
  32. submit(-name => "Submit!"), end_form;
  33. my $q = CGI->new;
  34. if (param) {
  35. foreach my $filehandle ($q->multi_param('uploaded_file')) {
  36. if (!$filehandle && $q->cgi_error) {
  37. die $q->cgi_error;
  38. }
  39. if ($filehandle) {
  40. my $info = $q->uploadInfo($filehandle);
  41. my $cd = $info->{'Content-Disposition'};
  42. my $filename = 'unknown';
  43. if ($cd =~ /\bfilename="(.*?)"/s) {
  44. $filename = $1;
  45. }
  46. open(my $out_fh, '>', "files/$filename")
  47. or die "Can't create file: $!";
  48. while (read($filehandle, (my $buffer), 1024 * 1024)) {
  49. print {$out_fh} $buffer;
  50. }
  51. close $out_fh;
  52. }
  53. else {
  54. die "Invalid upload...";
  55. }
  56. }
  57. }
  58. print end_html;