使用php上传本地文档

时间:2012-06-14 22:58:21

标签: php curl

我正在尝试测试一个rest api,以便将本地文件上传到https网址。我目前正在使用curl来做到这一点。问题是我的curl中的POST被转换为PUT(http://curl.haxx.se/docs/manpage.html)提到了相同的内容。 要从命令行进行测试,我使用以下内容:

  

curl -H“Content-Type:application / json”-H“授权:Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz”-H“Accept-Version:~1”-H“除了:100-continue”-H“Accept-Version:〜 1“-T”somefile.pdf“”https://abc-xyz.co/docs“

输出:

{"code":"BadMethod","message":"/docs does not support PUT"}

我的PHP代码:

$url = '"https://abc-xyz.co/docs';
$filepath = '/Users/me/Documents/somefile.pdf'; //mac path
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST" ); 
curl_setopt($ch, CURLOPT_HTTPHEADER,  
array('Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz', 'Accept-Version: ~1', 'Except: 100-continue'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$file = "@".$filepath;
curl_setopt($ch, CURLOPT_POSTFIELDS,$file); 
$response = curl_exec($ch);
if(!CURL_ERROR($ch))
  {      
  echo"\n The output is:".$response;
  }
else
  {
  echo "\nUpload failed ".curl_error($ch);
  exit;
  } 
curl_close($ch);

输出:我得到解析错误。

有人可以用3件事来教育我:

  1. 我可以使用curl为https执行POST吗?如果有,怎么样?如果没有,我的方法应该是什么?
  2. 如何在我的php中传递文件路径名?我试过“@”。$ filepath,但它仍然不喜欢它。
  3. 如果我想限制我的文件上传类型只是pdf我应该使用mime类型吗? (application / pdf ????)
  4. 谢谢, DR

1 个答案:

答案 0 :(得分:0)

从命令行,请参阅post fileupload with curl

从PHP,请参阅the manual

  

要在HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前添加@,使用完整路径。可以通过使用格式为'; type = mimetype'的类型的文件名来明确指定文件类型。此参数可以作为urlencoded字符串传递,如'para1 = val1& para2 = val2& ...',或者作为一个数组,字段名称为键,字段数据为值。如果value是数组,则Content-Type标头将设置为multipart / form-data。从PHP 5.2.0开始,如果使用@前缀将文件传递给此选项,值必须是数组。

curl_setopt($ch, CURLOPT_POSTFIELDS,array('someuploadname'=> "@".$filepath));