我可以在$ _FILES数组中添加base64图像吗?

时间:2013-07-23 06:26:49

标签: php database image base64

有没有办法将base64图像字符串添加到$_FILES数组(上传文件时获得的数组)?基本上,我想假冒从base64字符串上传文件。 base64字符串来自电子邮件附件。我不想使用file_get_contents(),因为我想将图像作为二进制图像保存在数据库中。我不需要上传它,但我确实需要它是$_FILES数组的一部分。

2 个答案:

答案 0 :(得分:4)

上传是一种将文件内容从客户端(通常是Web浏览器)发送到服务器的方法。听起来你已经在服务器上获得了所需的数据(在PHP中),所以你不需要上传它。

  1. 您可以使用base64_decode()将其从base64转换为直接文件内容。

  2. 如果您需要将其作为服务器上的文件,则可以使用file_put_contents()之类的内容将其另存为新文件。

  3. 如果您尝试使用$_FILE数组中的上传文件执行其他操作,请提供更多详细信息。无论是什么,您都不需要实际上传文件。


  4. $_FILES数组实际上并不包含文件的内容 - 它包含已保存内容的文件名。

    如果必须使用$_FILES数组(例如,为了重用现有类),则需要使用file_put_contents()来保存新的临时文件,然后手动添加指向该临时文件的$_FILES数组的条目(就像修改任何其他数组一样)。不要忘记在完成后删除临时文件 - 这通常由PHP自动处理,但如果您手动创建文件,则必须手动删除它。

    我强烈建议您重构或为您的班级提供替代界面。您不必假装文件已上传只是为了将其保存到数据库中。

答案 1 :(得分:0)

index.php

// https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

/* Simple */
function previewImage( image, preview, string )
{

    var fileImage   = image.files[0];
    var preview     = document.querySelector( preview );

    var reader      = new FileReader();

    reader.addEventListener( "load", function() {

        preview.style.height    = "100";
        preview.title           = fileImage.name;

        // convert image file to base64 string
        preview.src             = this.result;

        /* --- */

        document.querySelector( string ).value = this.result;

    }, false );

    if ( fileImage )
    {
        reader.readAsDataURL( fileImage );
    }

}

document.querySelector( "#imageID" ).addEventListener( "change", function() {

    previewImage( this, "#imagePreviewID", "#imageStringID" );

} )
/* Simple || */
<form method="post" action="process.php" >

    Title: <input type="text" name="title" /><br />

    File Upload: <input type="file" name="image" id="imageID" /><br />
    Preview: <img src="#" id="imagePreviewID" /><br />
    String base64: <textarea name="imageString" id="imageStringID" rows="10" cols="50" readonly="readonly" ></textarea>

    <hr />

    <input type="submit" name="submit" value="Submit" />

</form>


process.php

<?php

    $data = array(
        "post"  => $_POST,
        "files" => $_FILES
    );

    echo "<pre>";

    // echo json_encode($data);

    var_dump($data);

?>

<img src="<?= $_POST['imageString']; ?>" />

repl.it