php图像文件上传并转换为base64而不保存图像

Posted

技术标签:

【中文标题】php图像文件上传并转换为base64而不保存图像【英文标题】:php image file upload and convert to base64 without saving image 【发布时间】:2013-10-20 13:22:21 【问题描述】:

我知道如何使用以下代码上传图像文件并保存到其他位置。但是,我需要这样做,即用户上传图像并自动转换为 base64,而不将该图像保存在我的位置。我该怎么办?

<?php
//print_r($_FILES);
if(isset($_FILES['image']))

    $errors=array();
    $allowed_ext= array('jpg','jpeg','png','gif');
    $file_name =$_FILES['image']['name'];
 //   $file_name =$_FILES['image']['tmp_name'];
    $file_ext = strtolower( end(explode('.',$file_name)));


    $file_size=$_FILES['image']['size'];
    $file_tmp= $_FILES['image']['tmp_name'];
    echo $file_tmp;echo "<br>";

    $type = pathinfo($file_tmp, PATHINFO_EXTENSION);
    $data = file_get_contents($file_ext);
    $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
    echo "Base64 is ".$base64;



    if(in_array($file_ext,$allowed_ext) === false)
    
        $errors[]='Extension not allowed';
    

    if($file_size > 2097152)
    
        $errors[]= 'File size must be under 2mb';

    
    if(empty($errors))
    
       if( move_uploaded_file($file_tmp, 'images/'.$file_name));
       
        echo 'File uploaded';
       
    
    else
    
        foreach($errors as $error)
        
            echo $error , '<br/>'; 
        
    
   //  print_r($errors);


?>


<form action="" method="POST" enctype="multipart/form-data">

<p>
    <input type="file" name="image" />
    <input type="submit" value="Upload">

</p>
</form>

【问题讨论】:

图片转base64后你想做什么? 实际上,对于项目,我想将base64保存到数据库中,而不是保存图像文件。 使用file_get_contents()获取临时上传文件的内容,base64_encode()编码,file_put_contents()保存文件。尽管存储图像文件的 base64 编码表示听起来是个坏主意 - 对于大文件,您可能会遇到 RAM 问题,并且生成的文件将比原始文件大 33%。为什么要这样做? 是的。我需要用那个进行测试。如果我这样写,我不能得到base64字符串。你能指导我吗? $type = pathinfo($file_tmp, PATHINFO_EXTENSION); $data = file_get_contents($file_ext); $base64 = '数据:图像/' 。 $类型。 ';base64,' 。 base64_encode($data); echo "Base64 is ".$base64; file_get_contents($file_ext);你没有使用$file_tmp 【参考方案1】:

你的代码有错误:

$data = file_get_contents( $file_ext );

这应该是:

$data = file_get_contents( $file_tmp );

这应该可以解决您的问题。

【讨论】:

以上是关于php图像文件上传并转换为base64而不保存图像的主要内容,如果未能解决你的问题,请参考以下文章

将水印添加到图像(Base64)并进行转换

将base64中的字符串转换为图像并保存在文件系统中

使用 typescript 使用 data-uri 将图像转换为 base64

如何将图像转换为 Base64 字符串,并转换回图像,保存到 azure blob

将图像从base64转换为图像并保存在django的数据库中

将base 64编码字符串转换为图像