有没有办法将base64图像字符串添加到$_FILES
数组(上传文件时得到的数组)?基本上,我想伪造一个从base64字符串上传的文件。base64字符串来自一个电子邮件附件。我不想使用file_get_contents()
,因为我想将数据库中的图像保存为二进制图像。我不需要上传它,但我确实需要它成为$_FILES
数组的一部分。
您可以使用
base64_decode()
将其从base64转换为直接文件内容。如果您需要将其作为服务器上的文件,可以使用类似
file_put_contents()
的东西将其另存为新文件。如果您正在尝试对
$_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