Документация для разработчиков
Темная тема

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());
	}
);

Пример прямой загрузки файла на Диск

  1. Первым делом вызываем /rest/disk.folder.uploadFile и передаем методу только ID папки:
  2. disk.folder.uploadFile?auth=n2423m863oil59f99c9g0bm4918l5erz&id=289
    
  3. В ответ получаем параметр UploadUrl и параметр field:
  4. "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"
    }
    
  5. На полученный UploadUrl посылаем POST-запрос в multipart/form-data, в котором передаем файл в поле с именем, полученном в параметре field:
  6. 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
    
  7. В ответ получаем данные о загруженном файле:
  8. "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>';


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
5
Даниил Грабилов
Мой пример как загружать сгенерированный документ сразу на диск
Код
$CreateDoc = CRest::call('crm.documentgenerator.document.add',[
    'templateId'=>6, // Id Шаблон сделки
    'entityTypeId'=>2, //Тип Сделка
    'entityId' => $dealid, // ID сделки 
])['result'];

$doclink = $CreateDoc['document']['downloadUrlMachine']; //Берём ссылку на документ 
$newfile = base64_encode(file_get_contents($doclink)); //конвертируем в base64 т.к. данные можно загрузить только в таком формате

$result = CRest::call('disk.folder.uploadfile',[
    'id'=>'219893', //ID папки в данном случае на общем диске 
    'data'=>['NAME'=>$CreateDoc['document']['title'].'.docx'],// Имя файла которое добавляем 
    'fileContent'=>$newfile, //Файл в формате base54
]);

3
Роман Зебров
Если вы получаете ошибку типа "Неуникальное имя объекта." при загрузке файла, добавьте в запрос параметр "generateUniqueName" равным true (или "Y", 1)
© «Битрикс», 2001-2024, «1С-Битрикс», 2024