Прочитать файл (двоичные данные) как строку (аналог file_get_contents() в php)

1. PetroP 24.03.16 15:33 Сейчас в теме
Как прочитать двоичное содержимое файла в строку (аналог file_get_contents() в php)?
Необходимо передавать такое содержимое файла в http-запросе, но без кодирования в base64.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 302 24.03.16 16:02 Сейчас в теме
3. PetroP 24.03.16 16:35 Сейчас в теме
(2) Boneman, проблема в том, что файлы - не текстового содержимого. Картинки, документы, архивы...
4. Xershi 1536 24.03.16 16:40 Сейчас в теме
(3) PetroP, а как вы их читать потом будете?
7. PetroP 24.03.16 16:55 Сейчас в теме
(4) Xershi, моя задача - отправить. Читать - задача веб-сервера, разработчики которого определили такие стандарты.
17. Boneman 302 24.03.16 17:06 Сейчас в теме
(7) PetroP,
я в http сервисах делал такую конструкцию, чтобы вернуть страничку, с картинками..
т.к. http сервис не может вернуть картинки файлами, мне пришлось их кодировать в текст,
и в http страницу вместо имени файла СтрЗаменой впендюривать этот текст,
в итоге все работает.
            ПолныйПутьКФайлу = РабочийПсевдоКаталог+"\"+Филе.ИмяФайла;
            к = ПолучитьИзВременногоХранилища(Филе.Адрес);
            к.Записать(ПолныйПутьКФайлу);
            файлКартинки = Новый Файл( ПолныйПутьКФайлу);
            картинкатекстом = BASE64Строка(к);
            картинкатекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом;




а на страничке
там цикл, не буду весь код приводить но суть
ТекстСтраницы = СтрЗаменить(ТекстСтраницы, "\thevirtualpathtoimages"+"\"+карт.ИмяФайла, карт.КартинкаТекстом);



получившуюся страницу и используем
18. avto-torg 24.03.16 17:10 Сейчас в теме
(17) Boneman,
Base64 нельзя использовать по его API.
19. Xershi 1536 24.03.16 17:13 Сейчас в теме
(17) Boneman, у них погоду кривой алгоритм и не умеет или не правильно читает такую строку!
Поэтому они и привели в пример скрипт, которые они научились использовать для чтения файлов.
6. avto-torg 24.03.16 16:50 Сейчас в теме
(3) PetroP,
А тебе что надо? Функция из PHP file_get_contents эта функция безопасна для обработки данных в двоичной форме, то есть не изменяет исходные данные вставками конца строк и прочее.

Прочитать (Read)
Синтаксис:

Прочитать(<РазмерСтроки>)
Параметры:

<РазмерСтроки> (необязательный)

Тип: Число.
Размер возвращаемой строки. Если параметр не указан, текстовый файл читается до конца.
Возвращаемое значение:

Тип: Строка; Неопределено.
В случае, если читаемый файл завершен, то возвращается Неопределено.
Описание:

Считывает строку произвольной длины.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Примечание:

Строка нулевой длины не является признаком конца файла.
Пример:

Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI);
Стр = Текст.Прочитать(10);
Пока Стр <> Неопределено Цикл // чтение файла по 10 символов
    Сообщить(Стр);
    Стр = Текст.Прочитать(10);
КонецЦикла;
10. PetroP 24.03.16 16:58 Сейчас в теме
9. Boneman 302 24.03.16 16:57 Сейчас в теме
(3) PetroP, какая разница то,
оно прочитает как текст все что, хош..
вопрос в другом, что потом с этим делать будете
Xershi в (5) правильно сказал
12. PetroP 24.03.16 17:01 Сейчас в теме
(9) Boneman, ну вот читаю файл jpg. При прочтении в 1с и последующей записи/вставке/выводе от содержимого (которое я могу увидеть в том же notepade++) остается четыре символа ("яШяа"). Может я не правильно читаю?
15. Xershi 1536 24.03.16 17:03 Сейчас в теме
(12) PetroP, это кодировка походу.
20. Boneman 302 24.03.16 17:22 Сейчас в теме
(12) PetroP,
(которое я могу увидеть в том же notepade++

ты бы код привел который читаешь,
ну и текстовые редакторы, совсем не факт что - смогут обработать такую строку, файл ведь может состоять из чисел, которые не являются символами, или будут служебными какими то значениями.
Как вот он отобразит "0" - да х.б.з.
Двоичные данные и есть двоичные данные.


А так х.з, у меня вариантов больше нет
21. avto-torg 24.03.16 17:24 Сейчас в теме
(12) PetroP,
При прочтении в 1с и последующей записи/вставке/выводе от содержимого (которое я могу увидеть в том же notepade++) остается четыре символа ("яШяа")


Ну ты юморист кто-ж такое читает notepad`om. Такое читать надо WinHex`om хотя бы) Сравнивать два файла.
22. Xershi 1536 24.03.16 17:30 Сейчас в теме
(21) avto-torg, картинка открытая в нем и есть двоичные данные, а текстовый редактор просто туфту откроет?
24. avto-torg 24.03.16 17:34 Сейчас в теме
(22) Xershi, Да...а там будут именно цифровые коды...бинарные данные. Есть функция сравнения файлов любых между собой и поиск как числовой так и строковой. То есть можно сравнить на соответствие входные данные и исходящие на предмет расхождения и в каком месте.
23. PetroP 24.03.16 17:31 Сейчас в теме
(21) avto-torg, это я к тому, что после прочтения в 1с и сохранения в другой файл (т. е. прочитали текст из одного файла и записали этот же текст в другой новый файл средствами 1с) только эти символы и остаются. Даже не надо открывать хекс-редактор чтобы понять, что результат не соответствует источнику.
25. Boneman 302 24.03.16 17:35 Сейчас в теме
(23) PetroP, ну вот публикации
http://infostart.ru/public/292949/

и читают и записывают двоичные данные как строку.

Странно что у тебя не получается,
говорю - же код прикладывать надо, чтобы анализировать не просто слова
26. PetroP 24.03.16 17:45 Сейчас в теме
(25) Boneman, возможно действительно дело в кодировке (хоть и перепробовал самые популярные).
Вот сейчас сделал с помощью последовательного чтения - размер совпадает, но контрольные суммы разные. Теперь можно и побайтно сравнить...
27. Boneman 302 24.03.16 17:49 Сейчас в теме
(26) PetroP, ну текст то оно читает сразу одним куском
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();

а все остальные замуты, для того, чтобы обмануть программу и заставить ее этот текст обратно в файл воспроизвести.
я так понимаю, для твоей задачи это и не нужно, строка у тебя есть - и передавай ее, куда надо
29. PetroP 24.03.16 17:55 Сейчас в теме
(27) Boneman, у меня есть 1с и файл, лежащий на диске. Этот файл надо преобразовать в строку и строкой отправить в составе url.
28. PetroP 24.03.16 17:53 Сейчас в теме
(25) Boneman, код примитивный:
ТекстИсточник = Новый ТекстовыйДокумент;
ТекстИсточник.Прочитать(ФайлИсточник);
ТекстНазначение = Новый ТекстовыйДокумент;
ТекстНазначение.УстановитьТекст(ТекстИсточник.ПолучитьТекст());
ТекстНазначение.Записать(ФайлНазначение);

+ игрался с различными кодировками.
31. spacecraft 24.03.16 18:20 Сейчас в теме
(28) PetroP, кодировка нужна только "ISO-8859-1". И при чтении и при записи одну и туже. А не по-умолчанию где-то в одном место.
32. PetroP 24.03.16 18:42 Сейчас в теме
(31) spacecraft, да понятно. Не буду же я приводить все возможные вариации. С "ISO-8859-1" тоже сделал. Результат печальный.
Если вместо "ТекстовыйДокумент" использовать последовательный доступ к тексту, то файл назначения уже заполняется, но размеры файлов не совпадают.
33. avto-torg 24.03.16 19:03 Сейчас в теме
(32) PetroP,
Почитай это...Бинарные файлы POST запросом
Насколько помню твое задание и заключается POST запрос в формате JSON
34. PetroP 24.03.16 19:06 Сейчас в теме
(33) avto-torg, да, читал, спасибо. Но в публикации вариант с отправкой файла в теле запроса. У меня же файл должен быть в url-строке.
45. Messenger Unchained 29.03.16 16:59 Сейчас в теме
(34) Это что-то новое в веб-разработке, передавать файл через урл.
Ты точно этого хочешь? У того же iis насколько я помню, длина урла обрезается до 4 килобайт по избежание.

Я правильно понимаю твое желание, грубо говоря, прочитать файл с диска, "вставить его в адресную строку браузера" и нажать Пыщь?
46. PetroP 29.03.16 17:59 Сейчас в теме
(45) Messenger Unchained, ты посмотри (8) (аргумент "attachments") и ответь на свой вопрос. Я вполне допускаю, что разработчики что-то налажали в описании.
47. Messenger Unchained 29.03.16 18:33 Сейчас в теме
(46) PetroP, ну там даже пример есть
attachments[quotes.txt]=text%20file%content


Прочитали файл как однобайтовую строку и прошлись по нему UrlEncode. И ниже "настоятельно рекомендуют использовать POST-запросы"

Ну и сделай тоже самое - передай POST запрос типом application/x-www-form-urlencoded и значением переменной - результатом вызова КодироватьСтроку. А прочитать ее надо как ЧтениеТекста.Прочитать() в кодировке ISO-8859-1. Ну и при кодировании указать тоже самое
49. PetroP 30.03.16 09:41 Сейчас в теме
(47) Messenger Unchained, кэп? Я, собственно, так и делаю, если проследить тему с начала.
Но все же интересно, скажи, как специалист, это "что-то новое в веб-разработке, передавать файл через урл"?
52. Messenger Unchained 30.03.16 10:21 Сейчас в теме
(49) PetroP, у тебя там в начале какие-то чтение файла и текстовый документ. Передавать файл через урл - порочная практика, так как на пути может встретится прокси с ограничением размера урла. Параметры при передаче через пост могут передаваться как через урл так и через тело. При передаче через урл см. выше.

Извини, я ограничен временем и разжовывать тебе весь http протокол не буду. Однако замечу, что надо иметь представление о предметной области автоматизации. 1Снику - особенно.
53. PetroP 30.03.16 11:03 Сейчас в теме
(52) Messenger Unchained, ты не понимаешь одного: я не пишу стандарты и требования api web-сервиса. Поэтому, разглагольствования на тему "принято/непринято" здесь не уместны - это к создателям таких стандартов и требований.
Далее, если тебе не понятны "какие-то чтение файла и текстовый документ" и ты не можешь предложить иной способ получения строки двоичных данных средствами 1с, то о чем мы вообще разговариваем.
Извини, я ограничен временем и разжовывать тебе весь http протокол не буду. Однако замечу, что надо иметь представление о предметной области автоматизации. 1Снику - особенно.

Представление я имею. Я не имею углубленных знаний протокола http, и такие знания не являются необходимыми для "1Сника". Да и в данном случае они не нужны.
35. spacecraft 24.03.16 19:09 Сейчас в теме
(32) PetroP, может вам вообще стандартный механизм Интернет почты ИнтернетПочтовыеВложения подойдет?
Там есть перегруженный метод:
Вариант синтаксиса: Добавить двоичные данные

Синтаксис:

Добавить(<ДвоичныеДанные>, <НаименованиеВложения>)
Параметры:

<ДвоичныеДанные> (обязательный)

Тип: ДвоичныеДанные.
Данные вложения.
<НаименованиеВложения> (необязательный)

Тип: Строка.
Имя вложения, которое отображают почтовые клиенты.
Значение по умолчанию: Пустая строка.
Описание варианта метода:

Добавляет двоичные данные в коллекцию почтовых вложений.
Показать
30. PetroP 24.03.16 18:12 Сейчас в теме
(25) Boneman, по данной публикации результат такой же, как я описал в (12).
43. Xershi 1536 29.03.16 13:40 Сейчас в теме
(1) PetroP, почитав стандарт Base64 легко можно понять, что там даже есть пояснение:
Применение в веб-приложениях[править | править вики-текст]
Кодирование Base64 может быть полезно, если в окружении HTTP используется информация, длину которой можно точно определить. Также многим приложениям необходимо кодировать двоичные данные для удобства включения в URL, скрытые поля форм, и здесь Base64 удобно не только для компактного представления, но и относительной нечитаемостью для попытки выяснения случайным человеком-наблюдателем природы данных.

Использование URL-кодировщика над стандартом Base64, несмотря на это, неудобно, так как он преобразует символы '/' и '+' в специальные шестнадцатеричные последовательности. Если позднее эта строка используется вместе с базой данных или через гетерогенные системы, они прекращают работу на символе '%', сгенерированном URL-кодировщиком (потому что символ '%' также используется в ANSI SQL как шаблон).

По причине этого существует изменённый Base64 для URL,где не используется заполнение символом '=' и символы '+' и '/' соответственно заменяются на '*' и '-', так что использование кодеров/декодеров URL перестаёт быть необходимым и не имеет никакого воздействия на длину закодированного значения, оставляя ту же самую закодированную форму, неповреждённую для использования в реляционных базах данных, веб-формах и идентификаторах объекта вообще. Стандартом Base64-кодирования URL адресов признается вариант, когда символы '+' и '/' заменяются, соответственно, на '-' и '_' (RFC 3548, раздел 4).

Другой вариант называется изменённый Base64 для регулярных выражений, использует '!-' вместо '*-', для того, чтобы заменить стандартный Base64 '+/', потому что оба '+' и '*' могут быть зарезервированы для регулярных выражений (отметим, что '[]', используемый выше в IRCu варианте, может не работать в этом контексте).

Имеются другие варианты, которые используют '_-' или '._', если строка Base64 должна быть использована вместе с идентификаторами для программ, или '.-' для использования в токенах имён XML (Nmtoken), или '_:' в более ограниченных идентификаторах XML (Name). В некоторых случаях для URL применяется Base58, который не использует символы '+/'.

По итогу в 1С это выполнить очень просто!
44. PetroP 29.03.16 16:08 Сейчас в теме
(43) Xershi, не совсем понял мысль. Задачу сделал как говорил в (36) с помощью "ЧтениеФайла" и принудительным указанием символа перевода строки. "ТекстовыйДокумент" почему-то не работает (как на 8.3, так и на 8.2), что и ввело в заблуждение...
48. Xershi 1536 30.03.16 08:44 Сейчас в теме
(44) PetroP, я про то что твои разрабы написали не использовать бейс64 чистый, потому что обмен идет по веб и стоит просто переписать станрдарт, т.е. выполнить подмену символов.
50. PetroP 30.03.16 09:44 Сейчас в теме
(48) Xershi, не хочу углубляться в эксперименты.
Там дальше в описании примеров на пхп есть два варианта для "гет" и "пост". Я не спец в пхп, но что-то мне кажется, что в варианте "пост" файл отправляется в теле запроса (в отличие от примера для "гет"). Кто-нибудь может это подтвердить или опровергнуть?
51. Поручик 4671 30.03.16 09:53 Сейчас в теме
(50) В варианте "POST" содержимое файла отправляется в теле запроса. Вот примеры шестилетней давности, актуальные до сих пор.

Передача файлов и данных на веб-сервер средствами 1С:Предприятие 8.X методом POST
Вариант с передачей обычного файла. http://infostart.ru/public/20017/
54. PetroP 30.03.16 11:08 Сейчас в теме
(51) Поручик, я этот пример смотрел в первую очередь, как и говорил в (34).
Вот сейчас склоняюсь все-таки к тому, что описание методов делали люди, которые не должны были этого делать из-за отсутствия компетенции...
Будем пробовать...
55. Поручик 4671 30.03.16 12:34 Сейчас в теме
(54) И запомни - файл не должен быть в url-строке, так как есть ограничения на передачу данных в GET-строке. Тебе правильно написали. В данном случае знания протокола http для понимания того, что ты хочешь сделать, нужны.
56. PetroP 30.03.16 17:30 Сейчас в теме
(55) Поручик, ограничения не описаны в стандартах, они носят сугубо практический характер (зависят от клиента / броузера и от сервера). Вот поэтому знания протокола никак не помогут в данном вопросе.
57. Messenger Unchained 30.03.16 19:32 Сейчас в теме
(56) PetroP, ты - классический 1Сник, завидую. Не всем дано быть такими =)
5. Xershi 1536 24.03.16 16:44 Сейчас в теме
Суть кодирования сводится к тому чтобы двоичные данные представить в виде текста. Потом раскодировав их можно получить обратно двоичные данные и из них получить картинку или другой не текстовый файл.
8. PetroP 24.03.16 16:57 Сейчас в теме
(5) Xershi, вот описание. Допускаю, что я чего-то и не понимаю.
11. Xershi 1536 24.03.16 17:00 Сейчас в теме
(8) PetroP, так в чем проблема переписать этот скрипт на язык 1С? Там явно просто другая кодировка используется.
14. PetroP 24.03.16 17:03 Сейчас в теме
(11) Xershi, вот и прошу помощи...
16. Xershi 1536 24.03.16 17:04 Сейчас в теме
(14) PetroP, как переписать код того скрипта на 1С? ну так код приложите?
13. Xershi 1536 24.03.16 17:02 Сейчас в теме
(8) PetroP, да и что она возвращает двоичные данные в виде html-строки?
36. PetroP 24.03.16 19:10 Сейчас в теме
Вобщем пока остановился на сборке файла назначения последовательным доступом к тексту с указанием символа перевода строки. Результат отличается только одним лишним символом перевода строки в конце файла.
38. Serginio 942 25.03.16 11:07 Сейчас в теме
37+ Если тебе нужно multi- part это одно.

Если нужен массив байт то

Клиент=Врап.СоздатьОбъект("System.Net.Http.HttpClient, System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
МассивБайтов=Клиент.GetByteArrayAsync(адресРесурса).Result;

Convert=Врап.ПолучитьТип("System.Convert");
ДД=Base64Значение(Convert.ToBase64String(МассивБайтов));
Картинка=Новый Картинка(ДД);
39. PetroP 25.03.16 11:49 Сейчас в теме
(38) Serginio, спасибо. Хочу все-таки эту примитивную задачу решить средствами 1с.
40. Xershi 1536 25.03.16 12:39 Сейчас в теме
(39) PetroP, ну так переведите синтаксис другого языка на 1С и будет тоже самое.
Пример кода на пхп вы не дали. Так что успехов в переводе!
41. PetroP 25.03.16 14:24 Сейчас в теме
(40) Xershi, в смысле? В ПХП есть функция "file_get_contents(<имяфайла>)", которая возвращает строку.
42. Serginio 942 25.03.16 15:37 Сейчас в теме
Если для двоичных данных то только Base64
ФайлКартинки = "C:\Мои документы\Картинка1.bmp";
ДвоичныеДанные = Новый ДвоичныеДанные(ФайлКартинки);
стр=Base64Строка(ДвоичныеДанные);


Вот аналог твоей функции на C#
protected string file_get_contents(string fileName) 
{

 string sContents = string.Empty; 
 if (fileName.ToLower().IndexOf("http:") > -1){ 
     // URL 
     System.Net.WebClient wc = new System.Net.WebClient(); 
     byte[] response = wc.DownloadData(fileName); 
     sContents = System.Text.Encoding.ASCII.GetString(response); 
 } else { 
     // Regular Filename 
     System.IO.StreamReader sr = new System.IO.StreamReader(fileName); 
     sContents = sr.ReadToEnd(); 
     sr.Close(); 
 } 
 return sContents;
}

Показать


То это аналог ТекстовыйДокумент и ЧтениеТекста
58. DeniNikitin 40 22.06.19 12:03 Сейчас в теме
А подскажите где взять NetObjectToIDispatch45.dll, а то и на серверной платформе и клиентской нигде найти не могу даже goole не помагает!
59. John12345678 14.12.21 11:01 Сейчас в теме
Вытащил из CRM для метода SendMail достаточно следующего кода:
Тут реализована отправка письма UniSender и рабочий механизм с сложением файлов к письму.

Функция ОтправитьПисьмо(ТелоПисьма,api_key, Отправитель, EmailОтправителя, Кому, СписокРассылки="", ТекстОтвета) Экспорт
    СтруктураОтвета=Новый Структура;
    Уник =СТрока(новый УникальныйИдентификатор());
    Ошибка="";
     ИдРассылки = "";
    Если ПустаяСтрока(Ошибка) Тогда 
        Ресурс = "/sendEmail?format=json";
        //ТелоПисьма=ПараметрыПисьма.Тело;
        
        attachments="";
        
        НомерВложения = 0;
        //Для Каждого СтрокаТаблицы Из ПараметрыПисьма.Вложения Цикл 
        //    НомерВложения = НомерВложения + 1;
        //    ИмяВложения = СтрЗаменить(СтрокаТаблицы.Ключ, "_", "");
        //    ИмяВременногоФайла = КаталогВременныхФайлов()+ИмяВложения;
        //    Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("ДвоичныеДанные") Тогда
        //        СтрокаТаблицы.Значение.Записать(ИмяВременногоФайла);
        //    ИначеЕсли ТипЗнч(СтрокаТаблицы.Значение) = Тип("Структура") Тогда
        //        СтрокаТаблицы.Значение.ДвоичныеДанные.Записать(ИмяВременногоФайла);
        //    КонецЕсли;
        //    Текст = Новый ТекстовыйДокумент();
        //    Текст.Прочитать(ИмяВременногоФайла, "ISO-8859-1", Символы.ПС);
        //    Стр = Текст.ПолучитьТекст();
        //    attachments=attachments+"&attachments["+ИмяВложения+"]="+КодироватьСтроку(Стр, СпособКодированияСтроки.КодировкаURL, "ISO-8859-1");
        //    Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("Структура") И СтрНайти(ТелоПисьма, "src=""cid:"+СтрокаТаблицы.Значение.Идентификатор) > 0 Тогда
        //        ТелоПисьма = СтрЗаменить(ТелоПисьма, "src=""cid:"+СтрокаТаблицы.Значение.Идентификатор, "src="""+Строка(НомерВложения)+"_"+ИмяВложения);
        //    КонецЕсли;
        //КонецЦикла;
        
        ТелоПисьма=КодироватьСтроку(ТелоПисьма, СпособКодированияСтроки.КодировкаURL);

        АдресЭлектроннойПочты = "&email=" + КодироватьСтроку(Кому, СпособКодированияСтроки.КодировкаURL);
        //Для Каждого СтрокаТаблицы Из ПараметрыПисьма.Кому Цикл 
        //    АдресЭлектроннойПочты=АдресЭлектроннойПочты+"&email[]="+ + СтрокаТаблицы.Адрес;
        //    // АдресЭлектроннойПочты="&email=" + СтрокаТаблицы.Адрес;
        //КонецЦикла;
        
        СтрокаЗапроса="&api_key="+api_key
                        +"&platform=1c_UT_Zapovednik"
                        +"&track_read=1"
                        //+"&ref_key[]="+УНИК
                        +"&track_links=1"
                        +"&attach_multi=0"
                        +АдресЭлектроннойПочты
                        +"&sender_name="+?(ЗначениеЗаполнено(Отправитель), Отправитель, EmailОтправителя)
                        +"&sender_email="+EmailОтправителя
                        +"&list_id="+СписокРассылки
                        +?(ПустаяСтрока(ИдРассылки),"","&user_campaign_id="+ИдРассылки)
                        +"&subject="+КодироватьСтроку("ТЕСТ", СпособКодированияСтроки.КодировкаURL)
                        +"&body="+ТелоПисьма
                        +attachments
                        ;
        СтруктураОтвета=ПолучитьЗначениеИзОтветаJSON(ВыполнитьЗапрос(СтрокаЗапроса,Ресурс));
    Иначе 
        СтруктураОтвета.Вставить("error",Ошибка);
    КонецЕсли;
    
    Значение="";
    Если СтруктураОтвета.Свойство("error") Тогда
        ТекстОтвета = СтруктураОтвета.error;
        Возврат Неопределено;
    ИначеЕсли СтруктураОтвета.Свойство("warnings",Значение) Тогда
        Для каждого Предупреждение из Значение Цикл
            ТекстОтвета = ТекстОтвета+?(ЗначениеЗаполнено(ТекстОтвета), Символы.ПС, "") + Предупреждение.warning;
        КонецЦикла;
        Если СтрНайти(ТекстОтвета, "SZ150219-06")>0 Тогда
            //МассивАдресов = Новый Массив;
            //Для Каждого СтрокаТаблицы Из ПараметрыПисьма.Кому Цикл 
            //    МассивАдресов.Добавить(СтрокаТаблицы.Адрес);
            //КонецЦикла;
            ////СоответствиеАдресов = НайтиАдресаЭлектроннойПочтыВКонтактнойИнформации(МассивАдресов);
            ////Для каждого ОбъектКИ из СоответствиеАдресов Цикл
            ////    Если ЗначениеЗаполнено(ОбъектКИ.Значение) Тогда
            ////        Объект = ОбъектКИ.Значение.ПолучитьОбъект();
            ////        Объект.CRM_ОтписалсяОтEmailРассылок = Истина;
            ////        Объект.Записать();
            ////    КонецЕсли;
            ////КонецЦикла;
            Возврат "Отписался";
        КонецЕсли;
        Возврат Неопределено;
    ИначеЕсли СтруктураОтвета.Свойство("result",Значение) Тогда
        //Если Значение.Количество()>0 Тогда
        //    Возврат Значение[0].id;
        //Иначе
        //    Возврат Неопределено;
        //КонецЕсли;
    КонецЕсли;
    
КонецФункции

Функция ПолучитьЗначениеИзОтветаJSON(ФайлРезультата, ПрочитатьВСоответствие=Ложь)Экспорт 
    ЧтениеJSON=Новый ЧтениеJSON;
    // ЧтениеJSON.УстановитьСтроку(ТекстJSON);
    ЧтениеJSON.ОткрытьФайл(ФайлРезультата);
    Значение=ПрочитатьJSON(ЧтениеJSON, ПрочитатьВСоответствие);
    ЧтениеJSON.Закрыть();
    УдалитьФайлы(ФайлРезультата);
    Возврат Значение
КонецФункции

Функция ВыполнитьЗапрос(СтрокаЗапроса,Ресурс) 
    
    Сервер = "api.unisender.com/ru/api";
    
    HTTP =  Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
    ЗаголовокHTTP.Вставить("Accept-Language", "ru");
    ЗаголовокHTTP.Вставить("Accept-Charset", "utf-8");
    ЗаголовокHTTP.Вставить("Content-Language", "ru");
    ЗаголовокHTTP.Вставить("Content-Charset", "utf-8");
    HTTPЗапрос        = Новый HTTPЗапрос(Ресурс,ЗаголовокHTTP);
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса,"UTF-8",ИспользованиеByteOrderMark.НеИспользовать);
    
    ФайлРезультата = ПолучитьИмяВременногоФайла();
    HTTP.ОтправитьДляОбработки(HTTPЗапрос, ФайлРезультата);
    
    Возврат ФайлРезультата;
    
КонецФункции

Показать
60. John12345678 14.12.21 11:09 Сейчас в теме
(59) В частности вот этот код корректно формирует attachment

Для Каждого СтрокаТаблицы Из ПрикрепленныеФайлы Цикл 
            
    ФайлВложения=ПолучитьИзВременногоХранилища(СтрокаТаблицы.Файл);
    ИмяВременногоФайла = КаталогВременныхФайлов()+СтрокаТаблицы.Имя;    
    ФайлВложения.Записать(ИмяВременногоФайла);
            
    Текст = Новый ТекстовыйДокумент();
    Текст.Прочитать(ИмяВременногоФайла, "ISO-8859-1", Символы.ПС);
            
    Стр = Текст.ПолучитьТекст();
    attachments=attachments+"&attachments["+ИмяВложения+"]="+КодироватьСтроку(Стр, 
           СпособКодированияСтроки.КодировкаURL, "ISO-8859-1");
            
КонецЦикла;
Показать



но ещё обратите внимание, что строка запроса, в которой есть вложения, передается в
 HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса,"UTF-8",ИспользованиеByteOrderMark.НеИспользовать);


если передавать строку запроса, с вложением, в
Новый HTTPЗапрос(Ресурс,ЗаголовокHTTP)
в переменную "Ресурс", то будете получать ошибку 404.
Оставьте свое сообщение

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