我需要通过 cURL 将文件发送到服务器,并且服务器需要文件中的以下内容:
- 文件名
- 校验和
- 哑剧类型
- 尺寸
我尝试了以下方法:
- 使用 @ 和文件的完整路径
- 文件获取内容
- 只是完整路径
新的 CURLFile,带和不带额外参数
$mime = mime_content_type($file); $info = pathinfo($file); $name = $info['basename']; $output = new CURLFile($file, $mime, $name);curl_file_create
- 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"}`
所以这些字段必须包含在文件本身中。而不是额外的。