我可以将base64映像添加到$_FILES数组中吗


Can I add a base64 image to the $_FILES array?

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

上传是将文件内容从客户端(通常是web浏览器)发送到服务器的一种方式。听起来你已经在服务器上(用PHP)获得了所需的数据,所以你不需要上传
  1. 您可以使用base64_decode()将其从base64转换为直接文件内容。

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

  3. 如果您正在尝试对$_FILE数组中上载的文件执行其他操作,请提供更多详细信息。不管它是什么,你实际上不需要上传文件。


$_FILES数组实际上并不包含文件的内容,而是包含保存内容的文件名。

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

不过,我强烈建议重构或为类提供一个备用接口。您不应该为了将文件保存到数据库而假装文件已上载。

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