在邮递员中使用 php curl 将文件上传到 Nextcloud 但上传的文件为空
Posted
技术标签:
【中文标题】在邮递员中使用 php curl 将文件上传到 Nextcloud 但上传的文件为空【英文标题】:Uploading a file to Nextcloud with php curl in postman but the file uploaded is empty 【发布时间】:2020-04-07 05:47:42 【问题描述】:已解决 这是我的代码,我正在尝试使用它的 api 将文件上传到 nextcloud,我上传了文件但它是空的。
我所做的是使用 fopen fread 来保存文件内容并通过 postfields 将其发送到 nextcloud:
public function actionSubirArchivoNube()
$response = null;
if(Yii::$app->request->isPost)
$body = Yii::$app->request->getRawBody();
$body = Json::decode($body);
$datosNube = $body['CredencialesNube'];
$username = $datosNube['username'];
$password = $datosNube['password'];
$servidorNube = $datosNube['server_name'];
$camino = $datosNube['pathArchivo'];
$filename = basename($camino);
//Se tiene el contenido del archivo
$gestor = fopen($camino, "r");
$contenido = fread($gestor, filesize($camino));
fclose($gestor);
//Se tiene la url que responde a la nube y los headers
$url = $servidorNube .'/remote.php/dav/files/admin/' . $filename;
$headers = array('Authorization: Basic ' . base64_encode("$username:$password"),
'OSC-APIRequest: true', 'Content-Type: text/html; charset=UTF-8');
$options = array(
CURLOPT_SAFE_UPLOAD => true,
CURLOPT_HEADER => true,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $contenido,
CURLOPT_SSL_VERIFYPEER=> false
);
$curl = curl_init();
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
$response = json_decode($response,true);
return $response;
【问题讨论】:
取决于您在使用 POSTMAN 时是使用POST
还是GET
请求,即使请求是GET
,上述代码也会显示状态200 ok
,但除非POST
,否则不会执行任何操作
添加 else 块并抛出异常请求不会像你的例外
并且 POST 请求应该包含submit
【参考方案1】:
这段代码对我有用
$nombre_fichero = "C:\\pruebas\\Documento_1.pdf";
$gestor = fopen($nombre_fichero, "rb");
$contenido = fread($gestor, filesize($nombre_fichero));
fclose($gestor);
$login = 'usuario';
$password = 'clave';
$url = 'https://dominio.com/remote.php/dav/files/usuario/folder1/D4.pdf';
$options = array(
CURLOPT_SAFE_UPLOAD => true,
CURLOPT_HEADER => true,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_URL => $url,
CURLOPT_POSTFIELDS => $contenido,
CURLOPT_SSL_VERIFYPEER=> false,
CURLOPT_RETURNTRANSFER=> 1,
CURLOPT_HTTPAUTH=>CURLAUTH_BASIC,
CURLOPT_USERPWD=> $login.':'.$password,
CURLOPT_HTTPHEADER=>array('OCS-APIRequest: true')
);
$curl = curl_init();
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
echo "<pre>";
echo $response;
echo "</pre>";
【讨论】:
是的,这段代码没问题,就是用 fread 和 fopen 读取文件的内容,这对我也有用,谢谢以上是关于在邮递员中使用 php curl 将文件上传到 Nextcloud 但上传的文件为空的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP cURL 将文件上传到 Google 签名 URL
使用 HTML 表单、cURL 和 PHP 将文件上传到 Imageshack API