Python到服务器上的PHP发送图像

时间:2015-10-03 05:17:01

标签: php python post

我有一个覆盆子pi运行灯堆,arduino和相机连接。最终目标是,当我的arduino拍照时,它会将图像写入php地址,然后通过电子邮件发送。

现在,我正试图让图像放在正确的位置。

这是我的php片段:

<?php
print_r($_FILES);
move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/images/mypic.jpg");
?>

我的python代码正在执行:

import requests
r = requests.get('https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png')
r2 = requests.post('http://192.168.1.100/accept_image.php', data = r.content)

我意识到图像会被覆盖。那不是问题。我可以随后添加时间戳等等。

然而,这给了我一个错误代码。我是php的初学者,主要用于科学计算,所以不确定我是否正确传递图片。我知道ip是正确的,因为我可以连接到它,它都在网络中。

我看过这个Python script send image to PHP,但我仍然卡住了。

编辑: 经过进一步调试:

print_r($_POST);

返回一个空数组。不确定为什么?

1 个答案:

答案 0 :(得分:1)

要让multipart/form-data中的PHP可以访问文件,您必须使用HTML格式的文件编码(multipart/form-data)。这与包括请求正文中的内容的标准POST请求不同。这个方法在http://php.net/manual/en/features.file-upload.post-method.php中解释 - 这里的关键是:

  

PHP能够从任何符合RFC-1867标准的浏览器接收文件上传。

您尝试做的不是以RFC-1867方式发送,而是发送一个普通的POST请求。

所以你有两个选择:

  1. 使用$data = file_get_contents('php://input'); file_put_contents("/var/www/images/mypic.jpg", $data); 编码从Python发送数据。它不应该太难,但需要在Python方面做一些工作。

  2. 只需抓取PHP端的数据而不是从$ _FILES中获取,而是直接从POST正文中读取数据,如下所示:

  3. multipart/form-data

    它更多的是PHP端的内存占用,并且意味着您需要进行一些实际获得数据的验证,但是非常简单。

    为了澄清,在PHP $ _POST中仅在Content-type请求标头为application/x-www-form-urlencodedphp://input时填充(当然数据以正确的方式编码)。

    如果您收到包含正文中其他内容的POST请求,则可以通过阅读div流直接阅读,并且您负责处理/解码/验证它。