Chs:
Ну хотя бы посмотреть как сделан разбор multipart/form-data в CGI.pm , а потом внимательно прочитать rfc2616.
По моему надо в обратной последовательности это делать. [off]В очередной раз заглянул в CGI.pm и в очередной раз насладился отточенностью кода (на мой чайниковский взгляд).[/off]
Нашел тут скрипт у себя и т.к. я "
not можете присоединять файлы", попробую всунуть сюда.
Сразу хочу сказать, что писал это дело не я. Посмотри в чем разница между методами пост и гет и чем отличается multipart/form-data от как_её_там_по_умолчании
#!c:\\perl\\bin\\perl.exe
#use CGI::Carp qw( fatalsToBrowser );
######################## Config: ##############################
# #
$dirpath="../upload"; #Dir, where you want to save uploaded files#
# #
#################################################################
print "Content-type: text/html\\n\\n";
if ($ENV{\'CONTENT_TYPE\'} =~ /^multipart\\/form-data/)
{
if ($ENV{\'CONTENT_TYPE\'} =~ /boundary=(\\"?([^\\";,]+)\\"?)*/ ) {
$boundary = $1;
}
binmode STDIN;
$filename="";
read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
@buffer = split(/\\r\\n/,$buffer);
foreach $line (@buffer)
{
if ($line =~ /$boundary/)
{
$Current = "";
next;
}
if ($line =~ /Content-Disposition/)
{
print "$line\\n
";
if ($line =~ /^.+name\\s*=\\s*"*([^\\s"]+).+$/)
{
$Current = $1;
}
if ($filename eq ""){$filename = $1}
$INPUT{$Current} = "";
next;
}
if ($line =~ /Content-Type/)
{
$line =~ s/Content-Type:/ /g;
$line =~ s/text\\///g;
$line =~ s/image\\///g;
$line =~ s/audio\\///g;
$line =~ s/ //g;
$line =~ s/pjpeg/jpeg/g;
$type=$line;
$Current = "File";
$INPUT{\'File\'} = "";
next;
}
if (($line eq "") && ($Current ne "File"))
{
next;
}
$INPUT{$Current} .= $line;
}
}
elsif ($ENV{\'REQUEST_METHOD\'} eq "GET")
{
$buffer = $ENV{\'QUERY_STRING\'};
}
elsif ($ENV{\'REQUEST_METHOD\'} eq "POST")
{
read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($fields{$name})
{
$fields{$name} = $fields{$name}.",".$value;
}
else
{
$fields{$name} = $value;
}
}
if ($filename =~ /\\//)
{
@array = split(/\\//, $filename);
$real_name = pop(@array);
}
elsif ($filename =~ /\\\\/)
{
@array = split(/\\\\/, $filename);
$real_name = pop(@array);
}
else
{
$real_name = "$filename";
}
############################# Saving File: #############################
open (FILE, ">$dirpath/$real_name");
binmode FILE;
print FILE $INPUT{\'File\'};
close FILE;
############################ Printing Results ##########################
print << "[END]";
You was uploaded this file:
$real_name
[END]
#########################################################################
# Script by Lunarium Host #
# 2001 #
# E-mail: petrukha@mgsu.ru #
# Vercion 1.0.0 #
# #
# Thank You for interesting #
# my Work and Hobby ;-) #
# #
#########################################################################