Отправка файла из 1С в Битрикс24 методом POST
Всем привет! Хочу передать файл из 1С в Битрикс24, но на каком-то из этапов происходит неправильное кодирование.
Мои действия:
1. В 1С кодирую двоичные данные в Base64 при помощи функции Base64Строка().
2. Отправляю данные на сайт Битрикс24 методом POST.
Если отправляю файл небольшого размера с расширением .txt, то всё работает корректно.
Если отправляю файл 10-20 мб. с расширением .pdf, то при скачивании с сайта файлы различаются.
В 1С кодировал и декодировал данный .pdf файл: всё работает корректно.
Кто сталкивался с проблемой? На какой стадии что-то происходит не правильно?
До преобразований:
После преобразований:
Сам код в 1С:
Мои действия:
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(Чтение);
КонецЕсли;
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(7) посмотрите на любом сайте какие заголовки вы отправляете и вам отправляют, когда разный контент.
И почитайте что они значат, чтобы понимать как правильно отправить данные. А лучше откройте документацию. Там будет явно написано что и как отправлять.
Плюс как оказалось 1С отправляет 2 скрытых тега, если их не заполнить чем-нибудь.
И почитайте что они значат, чтобы понимать как правильно отправить данные. А лучше откройте документацию. Там будет явно написано что и как отправлять.
Плюс как оказалось 1С отправляет 2 скрытых тега, если их не заполнить чем-нибудь.
Вариант вы сами подсказали, если я вас правильно понял
Base64Строка() кодируем и отправляем и PDF и Text и отправляем как текст.
Открываем и перекодируем.
Вы намекаете, что вариант не проходит с раскодировкой?
Base64Строка() кодируем и отправляем и PDF и Text и отправляем как текст.
Открываем и перекодируем.
Вы намекаете, что вариант не проходит с раскодировкой?
(2) всё верно, я так и делаю: кодирую в строку и отправляю.
(2)
Я сравниваю свой исходный вообще не тронутый файл и файл который скачал с сайта (исходный файл ,который я перекодировал из двоичных данных в Base64Строка, отправил на сайт Битрикс24, а он его обратно перекодировал в двоичные данные).
(2)
Вы намекаете, что вариант не проходит с раскодировкой?
Я сравниваю свой исходный вообще не тронутый файл и файл который скачал с сайта (исходный файл ,который я перекодировал из двоичных данных в Base64Строка, отправил на сайт Битрикс24, а он его обратно перекодировал в двоичные данные).
До преобразований:
После преобразований:
Сам код в 1С:
После преобразований:
Сам код в 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(Чтение);
КонецЕсли;
ПоказатьПрикрепленные файлы:
ВремФайл = Новый ДвоичныеДанные(Путь);
СтрокаФорматBase64 = Base64Строка(ВремФайл);
//вот эту строку добавь и будет работать
СтрокаФорматBase64 = КодироватьСтроку(СтрокаФорматBase64 , СпособКодированияСтроки.КодировкаURL);
СтрокаФорматBase64 = Base64Строка(ВремФайл);
//вот эту строку добавь и будет работать
СтрокаФорматBase64 = КодироватьСтроку(СтрокаФорматBase64 , СпособКодированияСтроки.КодировкаURL);
Подскажите, пожалуйста, что я делаю не так, пытаюсь передать файл на Битрикс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.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показатьв Битриксе создается элемент, но файл не приходит
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот