disk.folder.uploadfile
Scope: disk Права на выполнение: для всех
Описание
disk.folder.uploadfile
Загружает новый файл в указанную папку.
В случае успеха возвращает структуру, аналогичную disk.file.get.
Параметры
Параметр | Описание |
---|---|
id | Идентификатор папки. В текущем API загружать файл по пути к папке невозможно. Необходимо обязательно вычислить ID папки. |
fileContent | Аналогично 'DETAIL_PICTURE' в примере Обработка файлов. |
data | Массив, описывающий файл. Обязательное поле NAME - имя нового файла. Доступно отправка файла в виде строки, закодированной в base64. |
generateUniqueName | Необязательный, по умолчанию false. При указании true, для загружаемого файла будет уникализировано имя, добавлением
суффикса (1), (2)
Пример: avatar (1).jpg avatar (2).jpg и т.п. |
rights | Необязательный, по умолчанию пустой массив. Массив прав доступа на загружаемый файл. |
Примеры
Обратите внимание, что список доступных идентификаторов `TASK_ID` для установки прав можно получить rest-методом disk.rights.getTasks:
BX24.callMethod( "disk.folder.uploadfile", { id: 4, data: { NAME: "avatar.jpg" }, fileContent: document.getElementById('test_file_input'), generateUniqueName: true, rights: [ { TASK_ID: 42, ACCESS_CODE: 'U35' //доступ для пользователя с ID=35, для получения названия типа доступа можно воспользоваться https://dev.1c-bitrix.ru/rest_help/general/access_name.php }, { TASK_ID: 38, ACCESS_CODE: 'U2' //доступ для пользователя с ID=35, для получения названия типа доступа можно воспользоваться https://dev.1c-bitrix.ru/rest_help/general/access_name.php } ] }, function (result) { if (result.error()) console.error(result.error()); else console.dir(result.data()); } );
Пример прямой загрузки файла на Диск
- Первым делом вызываем /rest/disk.folder.uploadFile и передаем методу только ID папки:
- В ответ получаем параметр UploadUrl и параметр field:
- На полученный UploadUrl посылаем POST-запрос в multipart/form-data, в котором передаем файл в поле с именем, полученном в параметре field:
- В ответ получаем данные о загруженном файле:
disk.folder.uploadFile?auth=n2423m863oil59f99c9g0bm4918l5erz&id=289
"result": { "field": "file", "uploadUrl": "http://b24.sigurd.bx/rest/upload.json?auth=n2423m863oil59f99c9g0bm4918l5erz&token=disk%7CaWQ9Mjg5Jl89QkYzazEzaXNnUjNHcVZQcDJZaGxGRmI4TGhXOG5EZXQ%3D%7CInVwbG9hZHxkaXNrfGFXUTlNamc1Smw4OVFrWXphekV6YVhOblVqTkhjV lpRY0RKWmFHeEdSbUk0VEdoWE9HNUVaWFE9fG4yNDIzbTg2M29pbDU5Zjk5YzlnMGJtNDkxOGw1ZXJ6Ig%3D%3D.Aga709nyY0%2BrFiv3laHjfg6XuOO5JT6ttjU%2F53ifphM%3D" }
http --form POST "http://b24.sigurd.bx/rest/upload.json?auth=n2423m863oil59f99c9g0bm4918l5erz&token=disk%7CaWQ9Mjg5Jl89QkYzazEzaXNnUjNHcVZQcDJZaGxGRmI4TGhXOG5EZXQ%3D%7CInVwbG9hZHxkaXNrfGFXUTlNamc1Smw4OVFrWXp hekV6YVhOblVqTkhjVlpRY0RKWmFHeEdSbUk0VEdoWE9HNUVaWFE9fG4yNDIzbTg2M29pbDU5Zjk5YzlnMGJtNDkxOGw1ZXJ6Ig%3D%3D.Aga709nyY0%2BrFiv3laHjfg6XuOO5JT6ttjU%2F53ifphM%3D" file@~/somelongfile.log
"result": { "CODE": null, "CREATED_BY": "1", "CREATE_TIME": "2016-03-30T14:30:41+02:00", "DELETED_BY": null, "DELETED_TYPE": 0, "DELETE_TIME": null, "DETAIL_URL": "http://b24.sigurd.bx/company/personal/user/1/disk/file/Тестируем REST/somelongfile.log", "DOWNLOAD_URL": "http://b24.sigurd.bx/rest/download.json?auth=n2423m863oil59f99c9g0bm4918l5erz&token=disk%7CaWQ9MjkwJl89ZTI4MG9TcDZCQno2MDAwVmV3cnRkbWxLM2hLN0JweEs%3D%7CImRvd25sb2FkfGRpc2t8YVdROU1qa3dKbDg5WlRJNE1HOVRjRFpD UW5vMk1EQXdWbVYzY25Sa2JXeExNMmhMTjBKd2VFcz18bjI0MjNtODYzb2lsNTlmOTljOWcwYm00OTE4bDVlcnoi.QlpUpx4mG9sxeyMyholPfdgkoXgc9kK9gtbOagqSo7s%3D", "FILE_ID": 209, "GLOBAL_CONTENT_VERSION": 1, "ID": 290, "NAME": "somelongfile.log", "PARENT_ID": "289", "SIZE": "496136787", "STORAGE_ID": "1", "TYPE": "file", "UPDATED_BY": "1", "UPDATE_TIME": "2016-03-30T14:30:43+02:00" }
Как загрузить файл через UploadUrl на php
<?php require_once (__DIR__.'/crest.php'); $path = __DIR__ . '/pic.jpg'; $folderId = 1; $result = []; if (file_exists($path)) { $file = CRest::call( 'disk.folder.uploadfile', [ 'id' => $folderId, ] ); if (!empty($file['result']['uploadUrl'])) { $info = pathinfo($path); if ($info['basename']) { $delimiter = '-------------' . uniqid('', true); $name = $info['basename']; $mime = mime_content_type($path); $content = file_get_contents($path); $body = '--' . $delimiter. "\r\n"; $body .= 'Content-Disposition: form-data; name="file"'; $body .= '; filename="' . $name . '"' . "\r\n"; $body .= 'Content-Type: ' . $mime . "\r\n\r\n"; $body .= $content . "\r\n"; $body .= "--" . $delimiter . "--\r\n"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $file['result']['uploadUrl']); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); curl_setopt( $ch, CURLOPT_HTTPHEADER, [ 'Content-Type: multipart/form-data; boundary=' . $delimiter, 'Content-Length: ' . strlen($body), ] ); $out = curl_exec($ch); try { $result = json_decode($out, true, 512, JSON_THROW_ON_ERROR); } catch (JsonException $e) { $result = [ 'error' => $e->getMessage(), ]; } } } } echo '<pre>'; print_r($result); echo '</pre>';
Даниил Грабилов
|
||
Мой пример как загружать сгенерированный документ сразу на диск
| ||
Роман Зебров
|
Если вы получаете ошибку типа "Неуникальное имя объекта." при загрузке файла, добавьте в запрос параметр "generateUniqueName" равным true (или "Y", 1)
|
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.