Jump to content

Проблема с загрузкой файлов по REST API

Featured Replies

001 а у вас-то это работает? Или на лету изобретаете?

Сейчас NO_FILES

  On 06.01.2024 at 18:52, MrShandy said:

Зачем его открытым то держать пока запрос выполняется? 

Да это не принципиально для отладки. 

  • 8 месяцев спустя...
  • Author

И вновь вернулся к этой теме, не даёт мне покоя загрузка. Может кто то всё таки придумал как можно загрузить по стандартному эндпоинту?

  On 06.01.2024 at 13:07, MrShandy said:

Не совсем понимаю как мне загружать файлы по REST API. Написал скрипт на python для загрузки, но как бы я не пробовал, ничего не получается. Если кто то делал, можете подсказать как именно отправляли файлы?

Вот скрипт, может я в чем то ошибаюсь? Хотя мы с напарником многое перепробовали уже и пока никаких результатов.

Показать контент

Вот часть кода API, ориентировался на него когда писал скрипт.

Показать контент

Ошибку постоянно получаю эту:

Failed to upload file. Error: {
    "errorCode": "1L296\/B",
    "errorMessage": "NO_FILES"
}

Если вывести \IPS\Request::i()->files вместо 'NO_FILES' выводится последний элемент массива files. Пока не понял логику этого

вы отправляете данные неправильно. API ожидает получить файлы в виде multipart/form-data, а вы отправляете их как обычные данные в запросе.

  • Author
  On 23.09.2024 at 12:19, umbro32111 said:

вы отправляете данные неправильно. API ожидает получить файлы в виде multipart/form-data, а вы отправляете их как обычные данные в запросе.

Вы тему прочитайте, там отправляли всеми способами. Ничего не получилось из этого

  On 23.09.2024 at 12:21, MrShandy said:

Вы тему прочитайте, там отправляли всеми способами. Ничего не получилось из этого

Для работы необходим multipart/form-data и не как иначе.

Как открыть файл в виде строки для того чтобы передать его в массиве files должен знать ты сам
например на php можно использовать file_get_contents

$communityUrl = 'https://example.ru/';
$apiKey = 'key';
$endpoint = '/downloads/files';

$curl = curl_init( $communityUrl . 'api' . $endpoint );
curl_setopt_array( $curl, array(
  CURLOPT_POST            	=> 1,
  CURLOPT_RETURNTRANSFER	=> TRUE,
  CURLOPT_HTTPAUTH	    	=> CURLAUTH_BASIC,
  CURLOPT_POSTFIELDS      	=> http_build_query( array(
      'category'      => $_POST['category'],
      'author'        => $_POST['author'],
      'title'         => $_POST['title'],
      'description'   => $_POST['description'],
      'files'         => array(
          $_FILES['file']['name'] => file_get_contents( $_FILES['file']['tmp_name'] )
      )
  ) ),
  CURLOPT_USERPWD		    => "{$apiKey}:",
  CURLOPT_USERAGENT			=> "MyUserAgent/1.0"
) );

$response = curl_exec( $curl );

это при условии формы:

<!-- Тип кодирования данных, enctype, требуется указывать только так, как показывает пример -->
<form accept-charset="utf-8" enctype="multipart/form-data" action="https://example.ru/post.php" method="POST">
  <!-- Поле MAX_FILE_SIZE требуется указывать перед полем загрузки файла -->
  <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
  <input type="hidden" name="category" value="1" />
  <input type="hidden" name="author" value="1" />
  <input type="hidden" name="title" value="Test file title" />
  <input type="hidden" name="description" value="Test file description" />
  <!-- Название элемента input определяет название элемента в суперглобальном массиве $_FILES -->
  Отправить файл: <input name="file" type="file" />
  <input type="submit" value="Отправить файл" />
</form>

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.