使用博客将图像上传到服务器PHP
我计划开发一个图像上传API,它需要将图像上传到服务器位置作为我的项目的一部分。 (用法是使用Android应用程序上传用户图片和头像)使用博客将图像上传到服务器PHP
API应与Imgur API类似,我们可以在其中使用发布请求将二进制图像上传到服务器。
我通过多个问题搜索,所有得到的是使用多部分请求,这需要html表单提交。由于我的目标是创建一个API,HTML表单提交将是不可能的。
无论如何,我提交了一个使用html表单上传图片的示例代码。有人可以展示我如何修改脚本以符合我的要求?
<html>
<body>
<form action="photo.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
PHP代码
<?php
$allow = array("jpg", "jpeg", "gif", "png");
$todir = 'uploads/';
if (!!$_FILES['file']['tmp_name']) // is the file uploaded yet?
{
$info = explode('.', strtolower($_FILES['file']['name'])); // whats the extension of the file
if (in_array(end($info), $allow)) // is this file allowed
{
if (move_uploaded_file($_FILES['file']['tmp_name'], $todir . basename($_FILES['file']['name'])))
{
// the file has been moved correctly
}
}
else
{
// error this file ext is not allowed
}
}
?>
需要HTML表单提交
这是不对的多部分请求。它需要格式正确的请求(标题和正文),句点。事实上,服务器无法知道用什么软件来生成请求 - 或者如果您只是在控制台中键入字节;-)
这很有趣。不过,我只想表达一下,我不能在我的情况下使用HTML表单提交。 –
我的回答是想表达你不需要。我很确定Android SDK提供了适当的库来生成'multipart/form-data'消息,而无需使用浏览器作为代理。无论如何,如果你的问题实际上与此无关,我建议你编辑它,我会很高兴删除我的答案。 –
关于您的服务器端代码的一些评论顺序:
正如你可以在阅读Handling file uploads,正确的方法来验证上传比较
['error']
子项与UPLOAD_ERR_OK
(codes explained here)。不要使用['tmp_name']
。不要让最终用户选择服务器上的实际文件名。你最好自己生成一个唯一的名称,并保持显示名称在其他地方(如数据库)
-
推荐的方法来确定文件扩展名是pathinfo:由用户提供
pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION)
文件扩展名不是确定文件类型的可靠方法。对于图片,经常使用getimagesize功能。
它有效的语法'!! $ _ FILES ['file'] ['tmp_name']'??双'!!' – Saty
哎呀。纠正它。感谢您的信息。 –
等待'!!'我认为实际上更有意义,现在你似乎只在没有文件上传时才运行验证码。双重exclam'!!'只是简单地将一个值转换为布尔值,因为它仅仅意味着虚假行为。因此,它将采用一个变量并评估它的布尔值,然后应用逻辑“NOT”,再次执行该操作只会将一个变量转换为布尔值,但由于它处于if条件,因此无论如何,所以我不在这里看点。但是,编辑后,它实际上看起来是错误的。 – apriede