我正在开发一个在线照片数据库(使用php和mysql),我有一个下载功能和一个上传功能。下载功能就像一个魅力,从服务器下载文件也不难。
我只是想知道是否可以(在 php 中)接收文件,但不能使用您选择文件的通常 html 表单。
例如如果我想上传文件"Photo.png",软件会将图像转换为base64字符串,然后将其发送到php脚本save.php?base=[BASE64]&&filename=[FILENAME]
如何使脚本将该字符串重新转换为照片.png然后将其保存到文件夹/img/中?
提前谢谢你, 凯斯帕。
它会像
$data = base64_decode($_GET['base']);
file_put_contents($_GET['filename'], $data)
在检查这些键是否存在并且它们不为空之前,您也不需要在 URL 中进行双重&
一些信息可以帮助您:
- 是的,您确实可以以任何形式接收数据并随心所欲地使用它。 在您的示例中,您可以发送以查询字符串编码的照片 base64,并使用
base64_decode($_REQUEST['base'])
或base64_decode($_GET['base'])
来获取它。
警告:过去,许多 Web 服务器对其将要处理的查询字符串的大小进行了限制 - 不过现在不确定它是否是一个问题。 检查您将使用的 Web 服务器以确认它没问题。 您可能需要考虑通过 POST 发送文件,在这种情况下,您甚至不一定需要在 base64 中对其进行编码。
- 我注意到您将文件名作为查询字符串的一部分发送。 如果您使用它,请先非常小心地对其进行消毒。 检查以确保它没有正斜杠或其他特殊字符,以便有人无法任意将二进制文件保存在服务器上的任何位置。 许多PHP框架可以开箱即用地为您处理此问题,或者查看此框架以获取您可以使用的更多直接PHP过滤选项: 文件名的字符串清理器