0

我需要通过 cURL 将文件发送到服务器,并且服务器需要文件中的以下内容:

  • 文件名
  • 校验和
  • 哑剧类型
  • 尺寸

我尝试了以下方法:

  1. 使用 @ 和文件的完整路径
  2. 文件获取内容
  3. 只是完整路径
  4. 新的 CURLFile,带和不带额外参数

    $mime = mime_content_type($file); 
    $info = pathinfo($file); 
    $name = $info['basename']; 
    $output = new CURLFile($file, $mime, $name);
    
  5. curl_file_create

  6. curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);

当我使用@ 时,它只要求提供上面提到的额外细节。当我使用 new CURLFile 和 curl_file_create 时,浏览器就会超时。

但是当我直接在 bash 中使用它时,像这样:

curl -X POST -F 'file=@dog.jpg' -F 'category=video' -F 'language=English' -F 
'subject_name= Accounting' -F 'studyYear=ALL' -F 'title=Test resources 3' -F 
'description=This is a test 3' http://127.0.0.1:5000/postfile -u root -p

然后它完美地工作。我不确定我应该在 php.ini 中做什么。

编辑

这是我在 cURL 到服务器时遇到的错误:

{"query":"add a new resource","doc":"resource-2db43d6f","info":"Schema validation failed","_xerror":true,"message":"child \"filename\" fails because [\"filename\" is required]. child \"checkSum\" fails because [\"checkSum\" is required]. child \"mimeType\" fails because [\"mimeType\" is required]. child \"size\" fails because [\"size\" is required]","isJoi":true,"name":"ValidationError","details":[{"message":"\"filename\" is required","path":"filename","type":"any.required","context":{"key":"filename"}},{"message":"\"checkSum\" is required","path":"checkSum","type":"any.required","context":{"key":"checkSum"}},{"message":"\"mimeType\" is required","path":"mimeType","type":"any.required","context":{"key":"mimeType"}},{"message":"\"size\" is required","path":"size","type":"any.required","context":{"key":"size"}}],"_object":{"_id":"resource-2db43d6f","owner":1,"created":1541769732,"private":false,"feedback":false,"category":"video","language":"English","studyYear":"ALL","title":"testing code","description":"This is a test","subject":0},"reqPath":"POST /api/1.0/resources/","detail":"child \"filename\" fails because [\"filename\" is required]. child \"checkSum\" fails because [\"checkSum\" is required]. child \"mimeType\" fails because [\"mimeType\" is required]. child \"size\" fails because [\"size\" is required]","person":"user"}`

所以这些字段必须包含在文件本身中。而不是额外的。

4

1 回答 1

0

我发现这个示例在 Google 中进行了快速搜索。

用于搜索的关键字是:在 php 中通过 cURL 发送文件

以下代码向http://example.com/发出请求,上传文件 example.txt,并输出响应。

// initialise the curl request
$request = curl_init('http://example.com/');

// send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt(
    $request,
    CURLOPT_POSTFIELDS,
    array(
      'file' => '@' . realpath('example.txt')
    ));

// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);

// close the session
curl_close($request);

学分:

凯特·莫利 http://code.iamkate.com/php/sending-files-using-curl/

于 2018-11-09T12:55:22.797 回答