【问题标题】:Upload a Pdf file to another website using cURL使用 cURL 将 Pdf 文件上传到另一个网站
【发布时间】:2020-09-21 11:36:51
【问题描述】:

具体与这个特定线程 Upload a file to a website using php 相关,我想在 PHP 上使用 cURL 来实现它。

如何设置?

以下是我尝试过的。

请注意,我只是通过添加我尝试过的代码来编辑它。

<?php


 if(isset($_POST["submit"])){

 $errors= array();//
 $name = $_FILES['fileToUpload']['name']; 
 $size = $_FILES['fileToUpload']['size']; 
 $type = $_FILES['fileToUpload']['type']; 
 $tmp_name = $_FILES['fileToUpload']['tmp_name']; 
 $upload_ok =1;
 $file_ext=strtolower(end(explode('.',$_FILES['fileToUpload'] 
 ['name'])));//



 $extensions= array("pdf","jpeg","jpg","png");

 $jj = file_get_contents($_FILES['fileToUpload']['tmp_name']);
 $mj = base64_encode($jj);

 if(in_array($file_ext,$extensions)=== false){
  $errors[]="vvvvv.";
 } 

 if($size >= xxx){
  $errors[]='xxx;'
 }

 if(empty($errors)==true){


  echo  "Success </br>";


  $request  = "xxxxxxxxx";

  $headers = array(
    "Authorization: Bearer xxxxxx",
     "Content-type => multipart/form-data",


     "Accept:application/json",
  );





  $data = [

     'voucher_data' => 'base64_encode($tmp_name)',

   'callback_url' => 'xxxxxxxxx'
  ];




  $curl = curl_init();

  curl_setopt_array($curl, array(
    CURLOPT_URL => "xxxxxxxxxx",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS =>  $data,
    CURLOPT_HTTPHEADER => $headers
  ));

  $response = curl_exec($curl);

  curl_close($curl);


  var_dump($response);


  }else{
  print_r($errors);
  }




?>

我尝试按照下面的建议使用 curl_file_create($mj) 但在 var_dump 上...它说 bool(false)

【问题讨论】:

  • 请提供您迄今为止所做的示例代码。请阅读更多关于如何提供mcve

标签: php json api curl file-upload


【解决方案1】:

我了解到您想发出一个请求,将文件上传到您自己以外的另一台服务器。

在 PHP 5.5 之后,有一个名为 curl_file_create 的函数,顾名思义,它用于上传文件。

$post = array (
    'extra_info' => '123456', // If required.. like user_id for avatar
    'file_contents' => curl_file_create ('path/to/file');
);

$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec ($ch);
curl_close ($ch); 

如果你不想使用它,那么有一个非常简单的方法:

$args = [];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);

$args['file'] = '@/path/to/file';
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_close ($ch); 

【讨论】:

  • 我尝试在 POSTFIELDS 中使用“tmp_name”,但在 var_dump 上出现错误。我只想知道应该将哪些数据作为变量放在 CURLOPT_POSTFIELDS 上; ?
  • 我再次编辑了我的问题并在那里发布了代码。它显示 var_dump bool false。
  • 不再建议使用@ 方法,自 PHP 5.5 起已弃用,自 PHP 5.6 起默认禁用,并在 PHP 7.0 中完全删除,每个版本的 PHP 都包含 @987654325 @method works 已经停产多年了。
【解决方案2】:

在尝试了很多不同的方法之后,我直接将这个值传递给了 post 字段,而不将它用作数组

CURLOPT_POSTFIELDS => “foo=$mj&callbackurl=url”,

它奏效了。这就是我被困的地方。我用另一种方式做了,但没有用。每种情况都是独一无二的。有人可能也需要这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多