2017-09-15 2 views
-1

erhalte ich eine POST-Anfrage mitSo laden Sie eine Datei von einer POST-Anfrage hoch. CONTENT_TYPE: application/octet-stream. Perl

CONTENT_TYPE: application/octet-stream 

ich alle Daten erhalten wie dieses

my $cgiQuery = CGI->new() or die(); 
my $cgiData = $cgiQuery->Vars; 

my $getQuery = CGI->new($ENV{QUERY_STRING}); 
my $getData = $getQuery->Vars; 

foreach my $getKey(keys %{$getData}) 
{ 
    $cgiData->{$getKey} = $getData->{$getKey}; 
} 

my $data = $cgiQuery->param('POSTDATA'); 

Aber wenn ich versuche, es

print Dumper($data) ."\n"; 
print Dumper($cgiData) ."\n"; 

ich diese erhalten zu drucken:

$VAR1 = 'type=catalog&mode=file&filename=offers0_14.xml'; 

$VAR1 = { 
     'POSTDATA' => 'type=catalog&mode=file&filename=offers0_14.xml', 
     'session' => 'aa4979ad18f64e4d959dd16444cee5fd' 
    }; 

Wie kann ich die Datei filename = offers0_14.xml auf den Server laden und hochladen?

+0

Zeigen Sie Ihren Upload-Code, wenn Sie möchten, dass wir darauf hinweisen, was damit nicht stimmt! – ikegami

+0

@ikegami Ich verstehe sogar nicht, wie ich den Dateinamen bekommen soll. Wie üblich, habe ich einen Dateinamen in QUERY_STRING und schreibe ihn dann auf den Server 'my $ filehandle = $ self -> {cgiQuery} -> param ('filename'); mein $ filename = $ xmlrootpath. $ CgiData -> {filename}; mein $ Puffer; öffnen (OUTFILE, "> $ filename"); while (meine $ bytesread = lesen ($ filehandle, $ buffer, 1024)) { drucken OUTFILE $ buffer; } schließen OUTFILE; ' –

+0

Es gibt keinen Dateinamen. Jetzt erfülle bitte meine Anfrage. – ikegami

Antwort

0

Die Lösung ist die nächste, dass POSTDATA Binärdatei ist. Also, ich habe diese Datei mit diesem Code

my $file_cgi = CGI->new($ENV{POSTDATA}); 
my $file = $file_cgi->Vars; 

my $filename = path_to_the_file_on_the_server;  
open (OUTFILE,"> $filename"); 
print OUTFILE $file->{POSTDATA}; 
close OUTFILE; 
2

Wenn Sie eine Datei stellen:

open(my $fh, '<:raw', $qfn) 
    or die $!; 

my $file = do { local $/; <$fh> }; 

$ua->post($uri, 
    Content_Type => 'application/octet-stream', 
    Content => $file, 
); 

es zu erhalten:

my $file = $cgi->param('POSTDATA'); 

Wenn Sie ein Formular stellen, die eine Datei-Upload-Feld enthält:

$ua->post($uri, 
    Content_Type => 'form-data', 
    Content => [ 
     type => 'catalog', 
     mode => 'file', 
     file => [ $qfn ], 
    ], 
); 

Um es zu erhalten:

+0

Ja, ich brauche die Datei von der 'application/octet-stream' Anfrage und speichere sie auf dem Server. Was ich nach 'my $ file = $ cgi-> param ('POSTDATA') tun sollte:' –

+0

Nichts. Dadurch wird die Datei (der Körper der Anfrage) in '$ file' abgelegt. Es gibt nichts anderes zu tun. – ikegami

+0

Aber es gibt Inhalte innerhalb der ** Angebote0_14.xml **. In dieser Datei befindet sich ein großer XML-Code. Wie soll ich diesen Inhalt bekommen? –

Verwandte Themen