Я пытаюсь загрузить файл в папку пользователей на OneDrive, используя их API.
$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/". $sekoia_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; Name = «файл»; имя файла = «[имя_файла]»»«.
Не уверен, где я иду не так, но это 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--
Заранее спасибо!
Обновить:
Когда я помещаю URL-адрес API непосредственно в свой атрибут действия формы и переименовываю поле ввода файла в «файл», файл загружается. Но тогда я просто получаю ответ, напечатанный на моей странице :), не хочу, чтобы я хотел, конечно, случиться.
<form action="<?php echo "https://apis.live.net/v5.0/". $sekoia_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>
По-видимому, единственный способ сделать POST-файл для API OneDrive — это сделать это прямо в вашей форме, как это. И предоставление redirect_uri. Ответ придет в форме значения фунта, прикрепленного к вашему URL. Что не идеально, так как мне придется получить идентификатор моего файла с помощью JavaScript.
<form action="<?php echo "https://apis.live.net/v5.0/". $sekoia_folder ."/files?access_token=" . $access_token . "&redirect_uri=http%3A%2F%2Fwww.sekoia-ppt.dev.intracto.com"; ?>" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="Upload your ppt" name="btnUpload"/>
</form>
Я все еще хотел бы сделать это в форме завитка, давая мне правильный ответ JSON. Так что, если кто-нибудь знает, как, пожалуйста, дайте мне знать!
Других решений пока нет …