Я пытаюсь добавить вложения в задачу с помощью библиотеки php asana (https://github.com/Asana/php-asana). Я успешно «добавляю» файлы, но когда я открываю их в задаче, они полностью пусты или повреждены.
Я пробовал .png, .doc и .pdf все с одинаковым результатом. Мой запрос выглядит так:
$attachment = $client->attachments->createOnTask(
$task->id,
'screenshot_from_2016-07-08_140457.png',
'http://edit.local.org/sites/default/files/webform/change-request-materials/screenshot_from_2016-07-08_140457_8.png',
'image/png'
);
Я также попытался использовать относительный путь для имени файла /sites/default/files/webform/change-request-materials/screenshot_from_2016-07-08_140457_8.png
но получить тот же результат.
Это «пример кода», который я использовал из библиотеки, кажется довольно простым.
// add an attachment to the task
$demoAttachment = $client->attachments->createOnTask(
$demoTask->id,
"hello world",
"upload.txt",
"text/plain");
Также попытался использовать 2 версии запроса curl в https://asana.com/developers/api-reference/attachments просто посмотреть, смогу ли я заставить вложения работать вообще.
Первый:
curl -H "Authorization: Bearer <personal_access_token>" https://app.asana.com/api/1.0/tasks/152938418205845/attachments --form "file=@http://edit.local.org/sites/default/files/webform/change-request-materials/screenshot_from_2016-07-08_140457_12.png;type=image/png"
В результате
curl: (26) couldn't open file "http://edit-fca.local.org/sites/default/files/webform/change-request-materials/screenshot_from_2016-07-08_140457_12.png"
И у меня 777 над файлом и папкой, в которой находится файл. Поэтому я решил удалить «@» перед файлом и затем получил:
{"errors":[{"message":"file: File is not an object","help":"For more information on API status codes and how to handle them, read the docs on errors: https://asana.com/developers/documentation/getting-started/errors"}]}
который, когда я зашел по этому URL, на самом деле ничего не говорил мне о Файле, а не об ошибке объекта.
Немного застрял, поскольку библиотека php-asana, кажется, по крайней мере помещает туда файлы, но они пусты. В то время как запрос curl, кажется, не работает вообще.
Кстати, я использую PHP 5.5.9.
Я попробовал пример кода в библиотеке php, и он, кажется, работает нормально. Я думаю, что вы, возможно, неправильно поняли аргументы, которые вы передаете createOnTask. Кроме того, кажется, что вы передаете ему путь к файлу в Интернете, который вы хотите загрузить, но на самом деле вы можете передать точные данные, которые хотите загрузить. Я не достаточно знаком с php, чтобы показать вам, как получить содержимое файла из Интернета, но если у вас есть файл локально, вы можете использовать file_get_contents.
Давайте рассмотрим пример кода и ваш код:
$demoAttachment = $client->attachments->createOnTask(
$demoTask->id,
"hello world", // Contents of file
"upload.txt", // The file name of the attachment
"text/plain" // encoding
);
против
$attachment = $client->attachments->createOnTask(
$task->id,
'screenshot_from_2016-07-08_140457.png', // This should be your image data- but like encoded the right way
'http://edit.local.org/sites/default/files/webform/change-request-materials/screenshot_from_2016-07-08_140457_8.png', // this should be the filename from above
'image/png'
);
Вот пример того, как вы можете сделать это с изображением в той же папке.
$demoAttachment = $client->attachments->createOnTask(
$demoTask->id,
file_get_contents("someimage.png"), // Contents of file
"upload.png", // The file name of the attachment
"image/png" // encoding
);
Для справки см. https://asana.com/developers/api-reference/attachments.
Других решений пока нет …