php - PHP cURL 仅创建空文件名(0 字节) - 不传输实际文件
问题描述
我正在使用文件类型输入通过 Ajax 将 FormData ($_FILES['files']) 传递给 PHP
我的 PHP cURL 如下所示:
$headers = array(
"Authorization: Bearer " . <token>,
"Host: graph.microsoft.com",
"Content-Type: multipart/form-data",
"Content-Length: 0",
);
$filename = $_FILES['file']['name'];
$postfile = curl_init('https://graph.microsoft.com/v1.0/users/' . <userid> . '/drive/root:/<folder>/' . $filename . ':/content');
curl_setopt($postfile, CURLOPT_PUT, 1);
curl_setopt($postfile,CURLOPT_HEADER,false);
curl_setopt($postfile, CURLOPT_HTTPHEADER, $headers);
curl_setopt($postfile,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($postfile,CURLOPT_SSL_VERIFYHOST,0);
$result = curl_exec($postfile);
curl_close($postfile);
这会在用户 OneDrive 的正确文件夹中创建一个具有正确扩展名和所有内容的文件,但它们都是空的(0 字节)。
我已经用许多不同类型的文件测试了几个小时,它总是一样的。
我哪里错了?
解决方案
我终于用以下方法解决了它:
$filename = $_FILES['file']['name'];
$filecon = fopen($_FILES['file']['tmp_name'],'r');
$filesize = filesize($_FILES['file']['tmp_name']);
$headers = array(
"Authorization: Bearer " . <token>,
"Host: graph.microsoft.com",
"Content-Type: application/json",
"Content-Length: " . $filesize,
);
$postfile = curl_init('https://graph.microsoft.com/v1.0/users/' . <userid> . '/drive/root:/<folder>/' . $filename . ':/content');
curl_setopt($postfile, CURLOPT_PUT, 1);
curl_setopt($postfile,CURLOPT_HEADER,0);
curl_setopt($postfile, CURLOPT_HTTPHEADER, $headers);
curl_setopt($postfile, CURLOPT_UPLOAD, 1);
curl_setopt($postfile, CURLOPT_INFILE, $filecon);
curl_setopt($postfile, CURLOPT_INFILESIZE, $filesize);
$result = curl_exec($postfile);
curl_close($postfile);
希望这可以帮助任何寻找 PHP cURL 上传到 OneDrive 的人!
推荐阅读
- javascript - 为什么 AWS lambda 使用 nodejs 和 excel4node 生成损坏的 excel 文件
- android - laravel API,我如何发送令牌?
- javascript - 在 JavaScript ES6 中,如果 console.log() 不调用 obj.toString(),它有什么用?
- python - 使用从模型填充的数据的 Django 加载表单
- ios - 自定义 UILabel、UIButton 类的 viewWillAppear 替代方案
- php - Wordpress 排队插件脚本未在前端加载
- c - 谁能告诉我为什么这段代码不起作用并保持打印 0.00 公里作为最短距离?
- java - MVVM - 在模型类中获取上下文
- python - 每次出现时如何保留numpy数组的最新元素
- javascript - 与 bcrypt.compare 一起使用时,resp.cookie 不起作用