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

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>';


© «Битрикс», 2001-2024, «1С-Битрикс», 2024