如何从base64字符串创建临时文件

时间:2015-10-29 11:34:50

标签: javascript perl

我试图使用javascripts .toDataURL()方法上传从canvas元素获取的图像(base64字符串):

var cropped_base64 = $crop_canvas[0].toDataURL('image/jpeg');
cropped_base64 = cropped_base64.replace('data:image/jpeg;base64,','');

$.ajax({
    url:the_url,
    data:{
        base64_string: cropped_base64
    },
    type:'POST',
    success:function(data){
        console.log(data)
    },
    error:function(data){
        console.log(data)
    }
});

我的服务器端代码对其进行解码:

my $base64_string = param('base64_string')
    or return 'error no base 64';

my $image_decoded = MIME::Base64::decode_base64($base64_string)
    or return 'error couldnt decode base64';

我需要将此图像作为临时文件传递给另一个例程。

我该怎么生成这个?我无法安装像Image :: magick ......

这样的模块

1 个答案:

答案 0 :(得分:2)

您已经在标量中获得了已解码的内容。将该标量打印到文件:

open ( my $image, '>:raw', '/path/to/image.png' ) or die $!;
print {$image} $image_decoded;
close ( $image ); 

如果你想避免使用它的潜在竞争条件,你必须做一些关于唯一命名的事情。 File::Temp可能是解决这个问题的好方法。

E.g:

use File::Temp qw/ tempfile /;
my ( $output_fh, $filename ) =  tempfile();
binmode $output_fh;
print {$output_fh} $image_decoded; 

这不会自动删除,因为您要求输入文件名(然后您可以将其传递给其他内容)。