curl — Добавление вложений в задачи с использованием библиотеки php asana приводит к пустым файлам в задаче

Я пытаюсь добавить вложения в задачу с помощью библиотеки 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.

0

Решение

Я попробовал пример кода в библиотеке 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.

1

Другие решения

Других решений пока нет …