我正在尝试使用HTTP POST和cURL将文件上传到RESTful WEB API。以下是我目前正在尝试的代码块。这样,除了一个问题以外,其他所有功能都可以正常工作,它将数据存储在默认的数据库主体中。我想要的是将文件上传到用户当前正在使用的数据库主体。我需要知道两件事-
是否可以通过cURL标头指定在Web服务器中使用的数据库主体,还是可以使用任何cURL选项? 进行指定,以便cURL POST上传提到的数据 数据库主体?
我以前从未使用过cURL,这是通过HTTP POST将使用multipart / form-data的文件上传到RESTful WEB API的最佳选择吗?
for($i=0; $i<count($_FILES['files_to_upload']['name']); $i++) {
if(!empty($_FILES['files_to_upload']['tmp_name'][$i])) {
$ext = pathinfo($_FILES['files_to_upload']['name'][$i], PATHINFO_EXTENSION);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['files_to_upload']['tmp_name'][$i]);
$data_for_api = [
'rel_type' => PROJECTS_REL_TYPE,
'rel_key' => $ktr,
'category' => $_POST['file_category'][$i],
'filename' => $_POST['file_name'][$i].".".$ext,
'file-form-data' => new CURLFile($_FILES['files_to_upload']['tmp_name'][$i],$mime,$_FILES['files_to_upload']['tmp_name'][$i]),
'description' => $_POST['file_name'][$i],
'uploader' => $this->session->userdata(RESNR)
];
$ch = curl_init(INTERNAL_API_URL.POST_A_FILE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_for_api);
if(!curl_exec($ch)) {
echo curl_error($ch);
}
curl_close($ch);
}
}
答案 0 :(得分:1)
这里确实有两个问题,这不是堆栈溢出的好格式,但是由于您的经历到目前为止非常痛苦,我将回答两个问题:
有没有一种方法可以在cURL标头中指定要在Web服务器中使用的数据库主体,还是可以使用任何cURL选项进行指定,以便cURL POST可以在上述数据库主体中上载数据?
对此的一般回答是“否”。 CURL对您的数据库一无所知,只说HTTP。 HTTP协议与数据库及其用户没有直接关系。这并不意味着不可能,但这是在“每个应用程序”和服务器端定义的。
您的服务器端API需要提供一种方法来执行此操作。只有该API执行此操作,CURL才能用于利用该功能。但这没有“一般性答案”。
我以前从未使用过cURL,这是通过HTTP POST使用multipart / form-data将文件上传到RESTful WEB API的最佳选择吗?
通常,RESTful api具有几种实现文件上传的方式。如果仅控制客户端而不控制服务器,那么这是否是最佳选择并不重要。 REST API将定义上传的工作方式,您需要使用该方法。
如果您同时控制服务器和客户端,则可能最好不要使用multipart/form-data
,而应使用PUT
请求并直接创建新资源,而不是将它们包装在其中表单/发布请求。
无论如何,如果您同时编写服务器和客户端,并且想了解更多有关这些答案的信息,请关闭此问题并打开2个新问题。