Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用post PHP将图像上载到服务器_Php_Html_Api_Post - Fatal编程技术网

使用post PHP将图像上载到服务器

使用post PHP将图像上载到服务器,php,html,api,post,Php,Html,Api,Post,我计划开发一个图像上传API,需要上传一个图像到服务器的位置作为我的项目的一部分。(使用android应用程序上传用户图片和头像) API应该类似于我们可以使用post请求将二进制图像上传到服务器的API 我搜索了多个问题,得到的都是使用多部分请求,需要提交html表单。由于我的目标是创建一个API,html表单提交将是不可能的 无论如何,我提交了一个使用html表单上传图像的示例代码。有人能告诉我如何修改脚本以满足我的要求吗 <html> <body&

我计划开发一个图像上传API,需要上传一个图像到服务器的位置作为我的项目的一部分。(使用android应用程序上传用户图片和头像)

API应该类似于我们可以使用post请求将二进制图像上传到服务器的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表单的多部分请求


那是错误的。它需要一个格式正确的请求(标题和正文),句号。事实上,服务器无法知道生成请求使用的是哪一个软件,或者您是否只是自己在控制台中键入了字节;-)

关于您的服务器端代码的一些备注,没有特别的顺序:

  • 正如您在上所读到的,验证上载的正确方法是将
    ['error']
    子项与
    upload\u ERR\u OK
    ()进行比较。不要用
    ['tmp\u name']
    来做这件事

  • 不要让最终用户选择服务器上的实际文件名。您最好自己生成一个唯一的名称,并将显示名称保留在其他位置(例如数据库)

  • 确定文件扩展名的建议方法是:

  • 用户提供的文件扩展名不是确定文件类型的可靠方法。对于图片,通常使用该功能


它的语法有效吗
$_文件['file']['tmp_name']
??双重
oops。更正了。谢谢你提供的信息。请等待“!!”我认为实际上更有意义,现在您似乎只在没有文件上传的情况下运行验证代码。双重感叹‘!!’简单地将一个值强制转换为boolean,因为它只意味着false fasle。所以它会取一个变量,计算它的布尔值,然后应用一个逻辑“NOT”,再次这样做只会将一个变量转换为布尔值,但由于它处于if条件下,所以不管它是否完成,所以我看不出这一点。然而,在你编辑之后,它实际上看起来完全错了。这是有道理的。再次编辑了我的代码。这很有趣。然而,我只想表示,我不能在我的案例中使用HTML表单提交。我的回答是,您不需要这样做。我很确定Android SDK提供了适当的库来生成
多部分/表单数据
消息,而无需使用浏览器作为代理。不管怎样,如果你的问题实际上与此无关,我建议你把它删掉,我很乐意删除我的答案。
pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION)