在邮递员中使用 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 但上传的文件为空的主要内容,如果未能解决你的问题,请参考以下文章

如何将 curl 上传进度发送到要显示的 ajax

使用 PHP cURL 将文件上传到 Google 签名 URL

使用 HTML 表单、cURL 和 PHP 将文件上传到 Imageshack API

使用PHP和cURL通过它们的API将文件上传到RapidShare

如何通过 PHP 使用 curl 上传文件 [关闭]

如何使用curl使用php上传文件[关闭]