Загрузка или обновление файла на яндекс диске через 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.

См. также

SALE! 10%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 руб.

12.06.2017    140256    783    295    

410

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

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

28000 руб.

15.12.2021    23208    160    48    

118

SALE! 10%

Перенос данных 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 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

50722 45650 руб.

15.04.2019    71582    180    149    

121

SALE! 10%

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

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

50722 45650 руб.

24.04.2015    194243    149    242    

279

SALE! 10%

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

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

48278 43450 руб.

03.12.2020    36079    90    63    

87

Перенос данных 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, почту.

15300 руб.

18.02.2016    186224    581    509    

521

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10520    11    8    

13

SALE! 20%

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

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

35000 28000 руб.

23.07.2020    49883    215    69    

175
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 1728 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");
		ЗагрузитьФайлССервера(Заголовки, СсылкаДляЗагрузки, ПутьДляСохранения);
		
	Иначе
		
		ВызватьИсключение "Ошибка при загрузке файла." + Символы.ПС + Результат.ПолучитьТелоКакСтроку();
		
	КонецЕсли;	
	
КонецПроцедуры	
Показать
aleksey2; afk; svbel85; GIZmo; user1445914; nikidevel; Matveev_VS; pavelpribytkin96; RustIG; +9 Ответить
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 ?? на Яндексе.
Оставьте свое сообщение