Загрузка или обновление файла на яндекс диске через rest-api

19.09.20

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Коллеги, в данной публикации я хочу поделиться кодом, с помощью которого можно загрузить файл на яндекс диск или обновить существующий.

Для начала работы с rest-api яндекс диска из 1С необходимо зарегистрировать приложение в яндексе. Создание приложения подробно описано в статье //infostart.ru/public/853451/.

Официальная документация по загрузке файла на яндекс диск через rest-api.

 
 Программный код

 

// Процедура - Загрузить обновить файл на яндекс диске
//
// Параметры:
//  token		 - 	 Строка, токен для авторизации
//  path		 - 	 Путь, по которому следует загрузить файл. Например, /Fbar (Имя папки)/photo.png. Максимальная длина имени загружаемого файла — 255 символов; максимальная длина пути — 32760 символов. 
//	Если файл необходимо загрузить в корень диска, то следует передать только имя файла в формате /photo.png
//  overwrite	 - 	 булево, признак перезаписи файла. Учитывается, если файл загружается в папку, в которой уже есть файл с таким именем. 
//  ПутьКФайлуДляЗагрузки	 - 	 путь к файлу, который необходимо загрузить на диск 
//
Процедура ЗагрузитьОбновитьФайлНаЯндексДиске(token, path, overwrite, ПутьКФайлуДляЗагрузки)
	
	//Параметры Get запроса для получения URL {{
	path = "disk:" + СтрЗаменить(path,"/","%2F");
	overwrite = ?(overwrite, "true", "false");
	//Параметры Get запроса для получения URL }}
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Заголовки.Вставить("Authorization","OAuth " + token);
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	
	//Получение URL для загрузки {{
	HTTPЗапрос = Новый HTTPЗапрос("/v1/disk/resources/upload?path=" + path + "&overwrite=" + overwrite, Заголовки);
	
	Соединение = Новый HTTPСоединение("cloud-api.yandex.net",,,,,, ЗащищенноеСоединение);
	
	Результат = Соединение.Получить(HTTPЗапрос);// GET запрос для получения URL
	//Получение URL для загрузки }} 
	
	Если Результат.КодСостояния <> 200 Тогда
		
		ВызватьИсключение "Ошибка при получении URL для загрузки." + Символы.ПС + Результат.ПолучитьТелоКакСтроку();
		
	Иначе
		
		Сообщить("URL для загрузки файла получен успешно." + Символы.ПС + Результат.ПолучитьТелоКакСтроку());
		
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
		
		СоответствиеРезультат = ПрочитатьJSON(ЧтениеJSON, Истина);
		
		СсылкаДляЗагрузки = СоответствиеРезультат.Получить("href");
		
		СсылкаДляЗагрузки = СтрЗаменить(СсылкаДляЗагрузки, "https://", "");
		
		ИмяСервера = Лев(СсылкаДляЗагрузки, СтрНайти(СсылкаДляЗагрузки, "/") -1);
		
		СсылкаДляЗагрузки = СтрЗаменить(СсылкаДляЗагрузки, ИмяСервера, "");
		
		//Загрузка файла на полученный URL {{
		HTTPЗапрос = Новый HTTPЗапрос(СсылкаДляЗагрузки, Заголовки);
		HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ПутьКФайлуДляЗагрузки));
		
		Соединение = Новый HTTPСоединение(ИмяСервера,,,,,, ЗащищенноеСоединение);
		
		Результат = Соединение.Записать(HTTPЗапрос);// PUT запрос		
		//Загрузка файла на полученный URL }}
		
		Если Результат.КодСостояния <> 201 Тогда
			
			ВызватьИсключение Результат.ПолучитьТелоКакСтроку();
			
		Иначе
			
			Сообщить("файл успешно загружен.");	
			
		КонецЕсли;
							
	КонецЕсли;
	
КонецПроцедуры

 

Данный программный код тестировался на версии платформы 8.3.17.1549.

См. также

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    138319    764    292    

405

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.230.x) и БП 3.0 (3.0.156.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    21912    144    40    

104

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

45650 руб.

15.04.2019    70482    174    146    

117

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 Бухгалтерский учет Управленческий учет Платные (руб)

Переход и перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.227.x), ERP 2.5 (2.5.16.x), КА 2.5 (2.5.16.x) .

28000 руб.

24.06.2020    62449    51    27    

81

SALE! %

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос в продаже с 2015г., и мы постоянно работаем над его развитием. Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

45650 27000 руб.

24.04.2015    192605    143    241    

274

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

В продаже с 2015 года | Воспользовались более 287 предприятий! | Перенос данных из УПП 1.3 в БП 3.0 | из КА 1.1 в БП 3.0 | Переносятся документы, начальные остатки и вся справочная информация | Сэкономьте свое время - используйте готовое решение для перехода! | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

39500 руб.

25.02.2015    169822    294    253    

374

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

14580 руб.

18.02.2016    184666    573    509    

516

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3.87.x и УТ 11.5.16.x

28000 руб.

23.07.2020    48536    208    64    

170
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aleksxx 71 14.08.20 02:01 Сейчас в теме
Спасибо, работает отлично.
Но вот бы еще получить ссылку на скачку файла.
pavelpribytkin96; +1 Ответить
2. aleksxx 71 14.08.20 02:26 Сейчас в теме
Процедура ПолучитьСсылкуНаФайлНаЯндексДиске(token, path)
	
	//Параметры Get запроса для получения URL {{
	path = "disk:" + СтрЗаменить(path,"/","%2F");
	//Параметры Get запроса для получения URL }}
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Заголовки.Вставить("Authorization","OAuth " + token);
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	
	//Получение URL для загрузки {{
	HTTPЗапрос = Новый HTTPЗапрос("/v1/disk/resources/download?path=" + path + "&", Заголовки);
	
	Соединение = Новый HTTPСоединение("cloud-api.yandex.net",,,,,, ЗащищенноеСоединение);
	
	Результат = Соединение.Получить(HTTPЗапрос);// GET запрос для получения URL
	//Получение URL для загрузки }} 
	
	Если Результат.КодСостояния <> 200 Тогда
		
		ВызватьИсключение "Ошибка при получении URL для загрузки." + Символы.ПС + Результат.ПолучитьТелоКакСтроку();
		
	Иначе
		
		Сообщить("URL для загрузки файла получен успешно." + Символы.ПС + Результат.ПолучитьТелоКакСтроку());
							
	КонецЕсли;
	
КонецПроцедуры
Показать
afk; svbel85; pavelpribytkin96; jONES1979; +4 Ответить
5. pavelpribytkin96 591 14.08.20 13:51 Сейчас в теме
(3)Можно опубликовать файл (предоставить доступ по ссылке), тогда ссылка будет "нормальной".
https://yandex.ru/dev/disk/api/reference/publish-docpage/
6. pavelpribytkin96 591 14.08.20 14:46 Сейчас в теме
(3)
	
        path = "disk:" + СтрЗаменить(path,"/","%2F");
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Заголовки.Вставить("Authorization","OAuth " + token);
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	
	//Публикация файла {{
	HTTPЗапрос = Новый HTTPЗапрос("/v1/disk/resources/publish?path=" + path, Заголовки);
	
	Соединение = Новый HTTPСоединение("cloud-api.yandex.net",,,,,, ЗащищенноеСоединение);
	
	Результат = Соединение.Записать(HTTPЗапрос);// PUT запрос
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
	
	СоответствиеРезультат = ПрочитатьJSON(ЧтениеJSON, Истина);
	
	СсылкаДляЗагрузки = СоответствиеРезультат.Получить("href");
	
	path = Прав(СсылкаДляЗагрузки, СтрДлина(СсылкаДляЗагрузки) - СтрНайти(СсылкаДляЗагрузки, "path=") - 4); //путь к опубликованному файлу
	//Публикация файла }}
	
	//Получение информации о файле {{
	HTTPЗапрос = Новый HTTPЗапрос("v1/disk/resources?path=" + path + "&fields=" + "public_url", Заголовки);
	
	Результат = Соединение.Получить(HTTPЗапрос);// GET запрос
	
	ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
	
	СоответствиеРезультат = ПрочитатьJSON(ЧтениеJSON, Истина);
	
	ПубличнаяСсылка = СоответствиеРезультат.Получить("public_url");
	//Получение информации о файле }}
Показать
afk; svbel85; GIZmo; jig; Tarlich; aleksxx; +6 Ответить
7. aleksxx 71 15.08.20 01:18 Сейчас в теме
(6) спасибо огромное
pavelpribytkin96; +1 Ответить
4. RustIG 1721 14.08.20 09:04 Сейчас в теме
+
пригодится, спасибо за разбор!
pavelpribytkin96; +1 Ответить
8. Angel_19 6 24.08.20 08:31 Сейчас в теме
Может кому пригодится, пример того как скачать файл с яндекс диска:

//  token		 - 	 Строка, токен для авторизации
//  path		 - 	 путь к файлу на яндекс диске
//  ПутьДляСохранения		 - 	 путь куда сохранить файл (указываем не только каталог, но и имя файла, пример: "d:\test_YD_333.txt")
Процедура СкачатьФайлСЯндексДиска(token, path, ПутьДляСохранения) Экспорт
	
	path = "disk:" + СтрЗаменить(path,"/","%2F");
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Заголовки.Вставить("Authorization","OAuth " + token);
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	
	//Получение URL для загрузки {{
	HTTPЗапрос = Новый HTTPЗапрос("/v1/disk/resources/download?path=" + path, Заголовки);
	
	Соединение = Новый HTTPСоединение("cloud-api.yandex.net",,,,,, ЗащищенноеСоединение);
	
	Результат = Соединение.Получить(HTTPЗапрос);// GET запрос для получения URL
	
	Если Результат.КодСостояния <> 200 Тогда
		
		ВызватьИсключение "Ошибка при получении URL для скачивания файла." + Символы.ПС + Результат.ПолучитьТелоКакСтроку();
		
	Иначе
		
		Сообщить("URL для скачивания файла получен успешно." + Символы.ПС + Результат.ПолучитьТелоКакСтроку());
		
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
		
		СоответствиеРезультат = ПрочитатьJSON(ЧтениеJSON, Истина);
		
		СсылкаДляЗагрузки = СоответствиеРезультат.Получить("href");
		
		Сообщить("Ссылка для загрузки:"+СсылкаДляЗагрузки);
		
		ЗагрузитьФайлССервера(Заголовки, СсылкаДляЗагрузки, ПутьДляСохранения);
		
	КонецЕсли;	
	
КонецПроцедуры	

Процедура ЗагрузитьФайлССервера(Заголовки, знач СсылкаДляЗагрузки, ПутьДляСохранения)
	
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	
	СсылкаДляЗагрузки = СтрЗаменить(СсылкаДляЗагрузки, "https://", "");
	ИмяСервера = Лев(СсылкаДляЗагрузки, Найти(СсылкаДляЗагрузки, "/") -1);
	СсылкаДляЗагрузки = СтрЗаменить(СсылкаДляЗагрузки, ИмяСервера, "");
	
	HTTPЗапрос = Новый HTTPЗапрос(СсылкаДляЗагрузки, Заголовки);
	Соединение = Новый HTTPСоединение(ИмяСервера,,,,,, ЗащищенноеСоединение);
	Результат = Соединение.Получить(HTTPЗапрос, ПутьДляСохранения);// GET запрос для получения URL
	
	Если Результат.КодСостояния = 200 Тогда 
		
		Сообщить("Файл успешно загружен с сервера.");
		
	ИначеЕсли Результат.КодСостояния >= 300 И Результат.КодСостояния <= 308 Тогда
		
		// редирект
		Сообщить("Перенаправление при загрузке файла ...");
		СсылкаДляЗагрузки = Результат.Заголовки.Получить("Location");
		ЗагрузитьФайлССервера(Заголовки, СсылкаДляЗагрузки, ПутьДляСохранения);
		
	Иначе
		
		ВызватьИсключение "Ошибка при загрузке файла." + Символы.ПС + Результат.ПолучитьТелоКакСтроку();
		
	КонецЕсли;	
	
КонецПроцедуры	
Показать
afk; svbel85; GIZmo; user1445914; nikidevel; Matveev_VS; pavelpribytkin96; RustIG; +8 Ответить
11. nikidevel 20.08.21 16:11 Сейчас в теме
Спасибо, работает , долго мучился .
9. execombat 41 18.09.20 13:38 Сейчас в теме
Спасибо. Пригодилось.

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

Исправил эту строку и всё ОК).

HTTPЗапрос = Новый HTTPЗапрос("/v1/disk/resources/upload?path=" + path + "&overwrite=" + overwrite, Заголовки);
pavelpribytkin96; +1 Ответить
10. pavelpribytkin96 591 19.09.20 20:58 Сейчас в теме
(9)Спасибо.
Поправил в публикации.
12. ZIGRAS 25.09.23 23:59 Сейчас в теме
Павел приветствую. У вас на сегодняшний день работает выгрузка файлов? Что только не делал вылетает ошибка "413 Request Entity Too Large" - "слишком большой размер файла", тестовый файл 50кб. Вашей обработкой пробовал включительно. Все работает кроме выгрузки.
13. sin_ner 16.12.23 21:53 Сейчас в теме
А как получить token ?? на Яндексе.
Оставьте свое сообщение