为了账号安全,请及时绑定邮箱和手机立即绑定

在邮递员中使用 php curl 将文件上传到 Nextcloud 但上传的文件为空

在邮递员中使用 php curl 将文件上传到 Nextcloud 但上传的文件为空

PHP
一只名叫tom的猫 2022-06-17 14:52:23
已解决这是我的代码,我正在尝试使用它的 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;        }           }
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

这段代码对我有用


$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>";


查看完整回答
反对 回复 2022-06-17
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信