その場で圧縮されたxmlファイルを作成してブラウザに送信しようとしています。IO::Compress::Zip
そのためにwithを使用しIO::String
ていますが、ドキュメントから期待するように機能しません。
最初に私のコード:
my $zipped_file;
foreach (@{$par{directory}}) {
my $input = IO::String->new($_->[0]);
zip $input => \$zipped_file, Append => 1, BinModeIn => 1|0; # Tried both for BinModeIn
}
return $zipped_file;
$par{directory}
次の構造を持つ arrayref です。
[
['DATA', 'FILENAME'], ['DATA', 'FILENAME'], ...
]
のデータ$par{directory}
は次のような文字列です。
<?xml version="1.0" encoding="UTF-8"?>
<derivatives>
<derivative ag="111520420" vhash="d6712f201155a9afb64dc5a5ba369c99">
//Some data
</derivative>
</derivatives>
1 つの空のファイルを含む .zip アーカイブとしてファイルをダウンロードしようとすると、得られるのはすべてです。ここで私が間違っていることについてのヒントはありますか?
前もって感謝します。
編集:これは奇妙です。私は今これを試しました:
use strict;
use warnings;
use IO::Compress::Zip 'zip';
my $xml1 = <<END_XML;
<?xml version="1.0" encoding="UTF-8"?>
<derivatives>
<derivative ag="111520420" vhash="d6712f201155a9afb64dc5a5ba369c99">
//Some data
</derivative>
</derivatives>
END_XML
my $xml2 = <<END_XML;
<?xml version="1.0" encoding="UTF-8"?>
<derivatives2>
<derivative2 ag="111520420" vhash="d6712f201155a9afb64dc5a5ba369c99">
//Some data
</derivative2>
</derivatives2>
END_XML
my $files = [[$xml1, 'xml1'], [$xml2, 'xml2']];
my $zipped_file;
foreach (@$files) {
open my $input, '<', \$_->[0];
zip $input => \$zipped_file, Append => 1, BinModeIn => 1;
}
open my $fh, '>:raw', 'zip.zip';
print $fh $zipped_file;
close $fh;
アーカイブはまだ空です。