如何仅压缩文件而不是完整路径

时间:2015-06-21 18:32:04

标签: perl cgi

我尝试使用Archive :: Zip压缩图像文件。文件在数据/温度/文件中当我遍历目录中的日志并将它们添加到zip文件时,当我只想要图像文件时,我最终得到文件夹层次结构和图像文件。

所以拉链最终包含:

Data
  └Temp  
    └Files
       └Image1.jpg
        Image2.jpg
        Image3.jpg

当我想要包含的zip文件是:

Image1.jpg
Image2.jpg
Image3.jpg

以下是我正在测试的脚本:

#!/usr/bin/perl
use Archive::Zip;

$obj = Archive::Zip->new();   # new instance

@files = <Data/Temp/Files/*>;

foreach $file (@files) {
    $obj->addFile($file);   # add files
}

$obj->writeToFileNamed("Data/Temp/Files/Images.zip");

2 个答案:

答案 0 :(得分:2)

使用chdir切换到目录:

use Archive::Zip;

$obj = Archive::Zip->new();   # new instance

chdir 'Data/Temp/Files';
@files = <*>;

foreach $file (@files) {
    $obj->addFile($file);   # add files
}

$obj->writeToFileNamed("Images.zip");

答案 1 :(得分:2)

zip档案成员的名称和路径完全独立于真实档案成员的名称和路径。虽然这两个名称通常是相同的,但basename允许您指定第二个参数,该参数是应存储文件信息的相应存档成员的名称和路径

您可以实现“File::Basename模块中我使用use strict要求从完整路径中提取文件名

的效果

该程序演示。请注意,您编写的每个Perl程序顶部的use warningsuse strict; use warnings; use Archive::Zip; use File::Basename 'basename'; my $zip = Archive::Zip->new; for my $jpg ( glob 'Data/Temp/Files/*.jpg' ) { $zip->addFile($jpg, basename($jpg)); } $zip->writeToFileNamed('Data/Temp/Files/Images.zip'); 都是必需

{% for item in items %}
    <tr>
        <form id="adauga_{{ item.stoc_id }}" action="{{ url_for('adauga', denumire_med=item.denumire_med, producator=item.producator) }}" method="POST">
            <td>{{ item.stoc_id }}</td>
            <td>{{ item.denumire_med }}</td>
            <td>{{ item.producator }}</td>
            <td>{{ item.data_expirarii }}</td>
            <td>{{ item.cant_fl }}</td>
            <td>{{ item.fractie }}</td>
            <td>{{ '%0.2f' | format(item.pret_fl | float) }}</td>
            <td><input type="number" max="{{ item.cant_fl }}" class="form-control" name="unitati"></td>
            <td><input type="number" max="{{ item.fractie }}" class="form-control" name="fractii"></td>
            <td><button type="submit" class="btn btn-primary" form="adauga_{{ item.stoc_id }}"><i class="fa fa-plus"></i> ADAUGA</button></td>
        </form>
    </tr>
{% endfor %}