get('http://myserver.com/image/123423.jpg'); 调用后,原始数据在 $im-6ren">
gpt4 book ai didi

linux - 将 "file"linux 命令应用于 Perl 中的二进制缓冲区

转载 作者:太空狗 更新时间:2023-10-29 11:24:38 26 4
gpt4 key购买 nike

从 Web 检索图像后,我在缓冲区中有图像:

my $img = $webapi->get('http://myserver.com/image/123423.jpg');

调用后,原始数据在 $img 中。我想确保数据代表图像而不是文本,所以我将它保存到磁盘上的文件并运行文件命令:

open my $fh, '>', '/tmp/images/rawdata.bin';
print $fh $img;
close $fh;
$res = `file /tmp/images/rawdata.bin`;
if ($res =~ 'GIF|JPEG|PNG') print "Image";
else "Not image";

如何避免将原始数据保存到文件并在内存中进行工作?

最佳答案

file 可以从STDIN 读取数据。所以最简单的方法可能是:

open ( my $file_cmd, '|-', 'file -' ) or die $!;
print {$file_cmd} $img;
print <$file_cmd>;

似乎有一个模块 - File::Type 可以执行此操作。我的快速测试表明它不如 file 聪明,因此用处不大。

关于linux - 将 "file"linux 命令应用于 Perl 中的二进制缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32647770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com