2010-08-08 90 views
17

从服务器获取图像很简单,但是我想到了不同的东西。这是一个疯狂的问题,但...是否有可能发送文件(图像)到服务器,但不使用表单上传或FTP连接?我想发送一个请求给例如。带有二进制内容的http://www.example.com/file.php。我想我需要设置Content-type header image/jpeg,但是如何在我的请求中添加一些内容?CURL PHP发送图像

回答

10

看到http://docs.php.net/function.curl-setopt

CURLOPT_POSTFIELDS完整数据的HTTP “POST” 操作来发布。 要发布文件,请用@预先指定一个文件名并使用完整路径。这可以作为urlencoded字符串(如'para1 = val1&para2 = val2&...')传递,也可以作为字段名称作为键和字段数据作为值的数组传递。如果value是一个数组,则Content-Type头将被设置为multipart/form-data。
16

有多种方式卷曲使用上传的图像文件,如:

$ch = curl_init(); 
$data = array('name' => 'Foo', 'file' => '@/path/to/image.jpeg'); 
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php'); 
curl_setopt($ch, CURLOPT_POST, 1); 
//CURLOPT_SAFE_UPLOAD defaulted to true in 5.6.0 
//So next line is required as of php >= 5.6.0 
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_exec($ch); 

,您可以检查的例子:http://au.php.net/manual/en/function.curl-setopt.php

+0

这就是我一直在寻找的文件。谢谢! – 2011-11-28 13:11:23

+0

谢谢你这样一个完整而简洁的例子! – 2013-07-08 02:37:38

+3

CURLOPT_SAFE_UPLOAD默认在5.6.0中为true ...所以你需要添加curl_setopt($ ch,CURLOPT_SAFE_UPLOAD,false);在设置CURLOPT_POSTFIELDS之前。 – muglio 2016-02-15 16:48:28

0

VolkerK是完全正确的,但我的经验表明,发送文件“ @“运算符只能用于数组。

$post['file'] = "@FILE_Path" 

现在你可以发送邮件使用CURLOPT_POSTFIELDS

+0

不再推荐此方法。请参阅:http://php.net/manual/en/class.curlfile.php – Erik 2014-12-10 03:58:50