РЕДАКТИРОВАТЬ: этот ответ (в настоящее время) в значительной степени не имеет значения. Если ваше изображение находится в Интернете, просто укажите параметр url
согласно API (см. Примеры в других ответах). Если вы хотите разместить изображение на Facebook напрямую, вы можете прочитать этот ответ, чтобы получить понимание. Также смотрите HTML5 Canvas.toDataUrl()
.
API говорит : "Чтобы опубликовать фотографию, отправьте запрос POST с вложением файла фотографии в виде multipart / form-data ."
FB ожидает, что байты загружаемого изображения находятся в теле HTTP-запроса, но их там нет. Или посмотреть на это по-другому - где в вызове FB.api () вы предоставляете фактическое содержимое самого изображения?
API FB.api () плохо документирован и не предоставляет пример HTTP POST, который включает тело. Из-за отсутствия такого примера можно сделать вывод, что это не поддерживается.
Это, вероятно, нормально - FB.api () использует что-то под названием XmlHttpRequest
под обложками, которые поддерживает , включая тело ... посмотрите это в своем любимом справочнике по JavaScript.
Тем не менее, вам все еще нужно решить 2 подзадачи:
- как подготовить байты изображения (и остальную часть запроса) как multipart / form-data ; и
- получение байтов самого изображения
(кстати, необходимость кодировать тело сообщения, вероятно, то, для чего предназначен метод PHP setFileUploadSupport (true) - скажите объекту facebook
, чтобы кодировал тело сообщения как multipart/form-data
перед отправкой)
Но это немного мизернее, чем это
К сожалению, подзадача '2' может укусить вас - нет способа (в прошлый раз, когда я смотрел) извлечь байты изображения из предоставленного браузером объекта Image.
Если загружаемое изображение доступно через URL, вы можете получить байты с помощью XmlHttpRequest. Не так уж плохо.
Если изображение поступает с рабочего стола пользователя, вы можете предложить пользователю:
<form enctype="multipart/form-data">
<input type="filename" name="myfile.jpg" />
<input type="hidden" name="source" value="@myfile.jpg"/>
<input type="hidden" name="message" value="My Message"/>
<input type="hidden" name="access_token" value="..."/>
</form>
(обратите внимание, что source
ссылается на имя, данное виджету загрузки файлов)
... и надеемся, что FB ожидает получения данных таким образом (сначала попробуйте использовать статическую HTML-форму, прежде чем динамически кодировать ее в JS). Можно сделать вывод, что на самом деле это так, поскольку они не предлагают другого способа сделать это.