Inhalt eines Zip-Archivs in Variable einlesen
Stefan B¡on
- perl
Moin zusammen,
ist wahrscheinlich ganz einfach, aber ich komm' nicht drauf: Wie kann man den (binären) Inhalt eines Archive::Zip-Objektes in eine Variable einlesen? Über den Umweg einer Datei geht's zwar ...
$zip->writeToFileNamed("tmp.zip");
open(HANDLE_ZIP, "tmp.zip");
my $zipData = <HANDLE_ZIP>;
... aber das ist ja wie "von hinten durch die Brust ins Auge"... ;-)
Gruß,
Stefan
你好 Stefan,
Wie kann man den (binären) Inhalt eines Archive::Zip-Objektes in eine Variable einlesen? Über den Umweg einer Datei geht's zwar ...
$zip->writeToFileNamed("tmp.zip");
open(HANDLE_ZIP, "tmp.zip");
my $zipData = <HANDLE_ZIP>;... aber das ist ja wie "von hinten durch die Brust ins Auge"... ;-)
Würde ich mit IO::String machen:
use IO::String;
use Archive::Zip;
# create Zip archive
my $str = '';
my $fh = IO::String->new($str);
$zip->writeToFileHandle($fh);
再见,
克里斯蒂安
你好 Christian,
(was immer auch "你好" heißt - ich hoffe, etwas Nettes *g*)
cool, danke, das probiere ich mal aus.
Noch ein Problem ist mir untergekommen: Wenn in den ZIP-Daten ein Byte mit dem Wert 0x0A enthalten ist, wandelt print das unter Windoze um in 0x0A + 0x0D - mit der Folge, daß natürlich die CRC-Checksumme nicht mehr stimmt. Gibt es in Perl noch eine andere Möglichkeit als print, um binäre Daten an den Browser zu senden?
Gruß,
Stefan
你好 Stefan,
(was immer auch "你好" heißt - ich hoffe, etwas Nettes *g*)
nǐ hǎo - eine Begrüßung ;)
Noch ein Problem ist mir untergekommen: Wenn in den ZIP-Daten ein Byte mit dem Wert 0x0A enthalten ist, wandelt print das unter Windoze um in 0x0A + 0x0D - mit der Folge, daß natürlich die CRC-Checksumme nicht mehr stimmt. Gibt es in Perl noch eine andere Möglichkeit als print, um binäre Daten an den Browser zu senden?
perldoc -f binmode
再见,
克里斯蒂安
Moin 克里斯蒂安,
perldoc -f binmode
Das löst leider das Problem mit der Umwandlung durch print nicht; die Daten liegen ja bereits in binärer Form vor, werden dann aber durch print bei der Ausgabe an den Browser geändert:
print "Content-type: application/x-download\n";
print "Content-disposition: attachment; filename=bla.zip\n\n";
print $zipData;
Gruß,
Stefan
你好 Stefan,
Das löst leider das Problem mit der Umwandlung durch print nicht; die Daten liegen ja bereits in binärer Form vor, werden dann aber durch print bei der Ausgabe an den Browser geändert:
Richtig, und genau das ändert binmode: binmode sorgt dafür, dass keinerlei Umwandlungen stattfinden, sondern die Daten "as-is", um es mal so auszudrücken, geschrieben werden.
binmode STDOUT;
print "Content-type: application/x-download\015\012";
print "Content-disposition: attachment; filename=bla.zip\015\012\015\012";
print $zipData;
再见,
克里斯蒂安
Moin 克里斯蒂安,
binmode STDOUT;
Ah, \*das\* hatte ich noch nicht probiert... THX!
Stefan
(was immer auch "你好" heißt - ich hoffe, etwas Nettes *g*)
http://translate.google.com/translate_t?langpair=zh|en
Struppi.