나는 압축 XML 파일을 즉시 작성하여 브라우저로 보내려고합니다. 나는 IO::Compress::Zip
을 IO::String
과 함께 사용하고 있지만 설명서에서 기대하는 바대로 작동하지 않습니다.IO :: Compress :: Zip을 파일 핸들에서 버퍼로 읽어들입니다.
먼저 내 코드 :
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입니다 :
<?xml version="1.0" encoding="UTF-8"?>
<derivatives>
<derivative ag="111520420" vhash="d6712f201155a9afb64dc5a5ba369c99">
//Some data
</derivative>
</derivatives>
모든 I : $par{directory}
에서
[
['DATA', 'FILENAME'], ['DATA', 'FILENAME'], ...
]
데이터는이 같은 문자열입니다 한 emp로 .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;
아카이브가 아직 비어 있습니다.
시도가>는 \ $ zipped_file, 추가] => 1, 이름 => $ _-은> [1], BinModeIn => 1 =;' – pmqs