Отправка файла из 1С в Битрикс24 методом POST

1. user878247 25.10.19 07:36 Сейчас в теме
Всем привет! Хочу передать файл из 1С в Битрикс24, но на каком-то из этапов происходит неправильное кодирование.

Мои действия:
1. В 1С кодирую двоичные данные в Base64 при помощи функции Base64Строка().
2. Отправляю данные на сайт Битрикс24 методом POST.

Если отправляю файл небольшого размера с расширением .txt, то всё работает корректно.
Если отправляю файл 10-20 мб. с расширением .pdf, то при скачивании с сайта файлы различаются.

В 1С кодировал и декодировал данный .pdf файл: всё работает корректно.

Кто сталкивался с проблемой? На какой стадии что-то происходит не правильно?

До преобразований:

После преобразований:

Сам код в 1С:

КодировкаТекса = КодировкаТекста.UTF8;
ВремФайл = Новый ДвоичныеДанные(Путь);
СтрокаФорматBase64 = Base64Строка(ВремФайл);



СтрокаТелоЗапроса = "&fields[UF_CRM_1564659921204]=label" + СлучайноеЧисло + "&fields[UF_CRM_1564654399040][fileData][0]=fileName"+СлучайноеЧисло+".pdf" + "&fields[UF_CRM_1564654399040][fileData][1]=" + СтрокаФорматBase64;  
									
									Запрос = Новый HTTPЗапрос(АдресРесурса);                                                                                                                                 
									Запрос.Заголовки.Вставить("Cookie", Cookie);
									Запрос.УстановитьТелоИзСтроки(СтрокаТелоЗапроса, КодировкаТекса, ИспользованиеByteOrderMark.НеИспользовать); 
									Ответ = Соединение.ОтправитьДляОбработки(Запрос);
									
									Если Ответ.КодСостояния <> 200 Тогда
										ВызватьИсключение "Ошибка при получении access_token"; 
									Иначе
										// разобрать полученный json
										json = Ответ.ПолучитьТелоКакСтроку();
										Чтение = Новый ЧтениеJSON;
										Чтение.УстановитьСтроку(json);
										ОтветСтруктура = ПрочитатьJSON(Чтение);
									КонецЕсли;
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Xershi 1486 04.11.19 08:49 Сейчас в теме
(1) возможно нужно в тегах указывать что передаете. Попробуйте запихнуть все в архив и сказать что архив отправляете.
user878247; +1 Ответить
7. AlexandrSmith 69 04.11.19 21:12 Сейчас в теме
8. Xershi 1486 04.11.19 22:08 Сейчас в теме
(7) посмотрите на любом сайте какие заголовки вы отправляете и вам отправляют, когда разный контент.
И почитайте что они значат, чтобы понимать как правильно отправить данные. А лучше откройте документацию. Там будет явно написано что и как отправлять.
Плюс как оказалось 1С отправляет 2 скрытых тега, если их не заполнить чем-нибудь.
2. AlexandrSmith 69 25.10.19 11:10 Сейчас в теме
Вариант вы сами подсказали, если я вас правильно понял

Base64Строка() кодируем и отправляем и PDF и Text и отправляем как текст.

Открываем и перекодируем.

Вы намекаете, что вариант не проходит с раскодировкой?
Alex1053669; user878247; +2 Ответить
3. user878247 25.10.19 13:06 Сейчас в теме
(2) всё верно, я так и делаю: кодирую в строку и отправляю.
(2)
Вы намекаете, что вариант не проходит с раскодировкой?

Я сравниваю свой исходный вообще не тронутый файл и файл который скачал с сайта (исходный файл ,который я перекодировал из двоичных данных в Base64Строка, отправил на сайт Битрикс24, а он его обратно перекодировал в двоичные данные).
4. uno-c 235 30.10.19 21:06 Сейчас в теме
И pdf портится, не открывается после таких преобразований? Лучше еще бы код показали.
Alex1053669; user878247; +2 Ответить
5. user878247 04.11.19 07:14 Сейчас в теме
До преобразований:

После преобразований:

Сам код в 1С:

КодировкаТекса = КодировкаТекста.UTF8;
ВремФайл = Новый ДвоичныеДанные(Путь);
СтрокаФорматBase64 = Base64Строка(ВремФайл);



СтрокаТелоЗапроса = "&fields[UF_CRM_1564659921204]=label" + СлучайноеЧисло + "&fields[UF_CRM_1564654399040][fileData][0]=fileName"+СлучайноеЧисло+".pdf" + "&fields[UF_CRM_1564654399040][fileData][1]=" + СтрокаФорматBase64;  
									
									Запрос = Новый HTTPЗапрос(АдресРесурса);                                                                                                                                 
									Запрос.Заголовки.Вставить("Cookie", Cookie);
									Запрос.УстановитьТелоИзСтроки(СтрокаТелоЗапроса, КодировкаТекса, ИспользованиеByteOrderMark.НеИспользовать); 
									Ответ = Соединение.ОтправитьДляОбработки(Запрос);
									
									Если Ответ.КодСостояния <> 200 Тогда
										ВызватьИсключение "Ошибка при получении access_token"; 
									Иначе
										// разобрать полученный json
										json = Ответ.ПолучитьТелоКакСтроку();
										Чтение = Новый ЧтениеJSON;
										Чтение.УстановитьСтроку(json);
										ОтветСтруктура = ПрочитатьJSON(Чтение);
									КонецЕсли;
Показать
Прикрепленные файлы:
9. 79044970523 930 23.01.20 19:52 Сейчас в теме
ВремФайл = Новый ДвоичныеДанные(Путь);
СтрокаФорматBase64 = Base64Строка(ВремФайл);
//вот эту строку добавь и будет работать
СтрокаФорматBase64 = КодироватьСтроку(СтрокаФорматBase64 , СпособКодированияСтроки.КодировкаURL);
taramaz; Nrk; kme; +3 Ответить
10. simich 76 14.02.24 20:16 Сейчас в теме
Подскажите, пожалуйста, что я делаю не так, пытаюсь передать файл на Битрикс24

	АдресЗапроса = "/rest/" + IDПользователя + "/" + Идентификатор + "/crm.item.add";
	
	ВремФайл = Новый ДвоичныеДанные(Адрес);
	СтрокаФорматBase64 = Base64Строка(ВремФайл);
	СтрокаФорматBase64 = КодироватьСтроку(СтрокаФорматBase64, СпособКодированияСтроки.КодировкаURL);
	
	КодирТекста = КодировкаТекста.UTF8;
	
	Соединение = Новый HTTPСоединение(АдресБитрикс,,,,, 60, Новый ЗащищенноеСоединениеOpenSSL);
	
	Запрос = Новый HTTPЗапрос(АдресЗапроса);
	Дата = ПреобразоватьДату(ТекущаяДата(), Истина);
	ТелоЗапроса = "entityTypeId=160&fields[UF_CRM_30_1706651794088]=" + Дата + "&fields[UF_CRM_30_1706651786250][fileData][0]=file3.pdf" + "&fields[UF_CRM_30_1706651786250][fileData][1]=" + СтрокаФорматBase64;
	
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодирТекста, ИспользованиеByteOrderMark.НеИспользовать); 
	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать


в Битриксе создается элемент, но файл не приходит
11. yaneev 42 25.04.24 11:56 Сейчас в теме
(10) какого типа на стороне Б24 реквизиты UF_CRM_30_1706651794088 и UF_CRM_30_1706651786250?
Получилось передать?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот