Smartsheet - Как прикрепить файл к строке, используя Smartsheet API и PHP curl - PullRequest
0 голосов
/ 31 января 2020

Документы API smartsheet предоставляют эту документацию для прикрепления файла к строке.

curl https://api.smartsheet.com/2.0/sheets/{sheetId}/rows/{rowId}/attachments

\ -H "Авторизация: Bearer ll352u9jujauoqz4gstvsae05" \ -H "Тип содержимого: application / msword "\ -H 'Content-Disposition: приложение; filename = "ProgressReport.docx" '\ -H "Content-Length: FILE_SIZE" \ -X POST \ --data-binary @ ProgressReport.docx

Как мне перевести это на соответствующие вызовы для сеанса скручивания в php?

Я предполагаю, что мне нужно создать блок заголовка, такой как

$headersAttachment = array(
    "Authorization: Bearer " . $AccessToken,
    "Content-Type: application/pdf",
    'Content-Disposition: attachment; filename="mydoc.pdf"', // **is this for just the filename or the full path?**
    "Content-Length: " . $FileSizeOfMyDoc 
);  

, и использовать его примерно так

$curlSession = curl_init($rowsURL . '/' . $rowId . '/attachments');
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headersAttachment);
curl_setopt($curlSession, CURLOPT_POSTFIELDS, $body);
curl_setopt($curlSession, CURLOPT_POST, TRUE);
$getSheetResponseData = curl_exec($curlSession);

Что мне нужно поместить в $ body для загрузки данных из файла?

В документации API smartsheet указано

В следующем примере запроса показана простая загрузка, которая добавляет вложение файла на лист:

POST https://api.smartsheet.com/2.0/sheets/4509093797881732/attachments Авторизация: Bearer ll352u9jujauoqz4gstvsae05 Content-Disposition: attachment; filename = "ProgressReport.docx" Content-Type: application / msword Content-Length: 5463

<Двоичный контент для файла>

Как показано в этом примере, содержимое файла включено в теле запроса POST. В большинстве языков программирования это делается путем чтения файла из входного потока и записи его в выходной поток HTTP-запроса.

это выполняется путем чтения файла из входной поток и запись его в выходной поток HTTP-запроса. <--- Как мне сделать это в PHP? </em>

Как после размышления, как могу я проверить это с почтальоном?

Заранее спасибо. Любая помощь будет потрясающей.

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Хотя Smartsheet не имеет PHP SDK, вы по существу используете дополнительный язык для отправки команд REST и JSON по проводам.

Вам понадобятся следующие заголовки:

POST /2.0/sheets/{sheetId}/rows/{rowId}/attachments
Host: api.smartsheet.com
Content-Type: image/jpeg; charset=binary
Accept-Encoding: gzip, deflate, br
Content-Disposition: attachment; filename=“Image.jpeg"
Content-Length: 1048945
Authorization: Bearer TOKENHERE

Я полагаю, что вы можете указать путь в параметре вашего имени файла, если вам нужно. И размер файла в байтах.

0 голосов
/ 16 февраля 2020

Похоже, у Почтальона был ответ все время. Почтальон имеет возможность генерировать фрагменты кода, которые до сих пор я не читал правильно, так как я был зациклен на CURL. Затем я заметил, что с левой стороны была опция для PHP - cURL, которая дала мне ответ, который я хотел. Использование этого кода наконец сработало для меня.

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.smartsheet.com/2.0/sheets/SHEETID/rows/ROWID/columns/COLOUMNID/cellimages",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "<file contents here>",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer ACCESSTOKEN",
    "Content-Type: image/png",
    "Content-Disposition: attachment; filename=\"modify.png\"",
    "Content-Length: <file size here>
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
...