【发布时间】:2014-10-08 07:59:23
【问题描述】:
我正在尝试使用他们的 API 将文件上传到 OneDrive 上的用户文件夹。
$cfile = curl_file_create(realpath($_POST['ppt-file']));
//place file in folder
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://apis.live.net/v5.0/". $my_folder ."/files?access_token=" . $access_token);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $cfile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$upload_result = trim(curl_exec($ch));
curl_close($ch);
我收到来自 API 的响应。
请求实体正文的“Content-Disposition”标头中的值不正确。此值的预期格式是 'Content-Disposition: form-data;名称=“文件”;文件名="[文件名]"'。"
不确定我哪里出错了,但这是预期的 http 标头。
POST https://apis.live.net/v5.0/me/skydrive/files?access_token=ACCESS_TOKEN
Content-Type: multipart/form-data; boundary=A300x
--A300x
Content-Disposition: form-data; name="file"; filename="HelloWorld.txt"
Content-Type: application/octet-stream
Hello, World!
--A300x--
提前致谢!
更新: 当我将 API url 直接放在表单的操作属性中并将文件输入字段重命名为“文件”时,文件会被上传。但是后来我只是在我的页面上打印了响应 :) 当然不想发生这种情况。
<form action="<?php echo "https://apis.live.net/v5.0/". $my_folder ."/files?access_token=" . $access_token; ?>" method="post" enctype='multipart/form-data'>
<input type="file" name="file"/>
<input type="submit" value="Upload your ppt" name="btnUpload"/>
</form>
【问题讨论】:
-
你有跟踪 CURL 生成的请求吗?不幸的是,API 的多部分 POST 格式不是很适合,因此请求需要看起来几乎与示例完全相同。见stackoverflow.com/questions/26225335/…
-
我现在可以上传文件了。但奇怪的是,如果文件是 powerpoint,它总是会在 OneDrive 上被破坏......我将很快将我的代码发布到 GitHub,以便人们可以协作。