Имя: Пароль:
1C
1С v8
Не могу по API получить файл pdf. Файл не открывается.
0 Radion
 
17.11.22
15:17
Прошу помочь. Не могу понять в чем проблема. Получил на веб сервисе url файла наклейки, далее делаю так:
FilePDF_url = Данные.FilePDF.url;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
Поток = Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8);
ЗаписьТекста.ЗаписатьСтроку(FilePDF_url);
ЗаписьТекста.Закрыть();                                
ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
ДвоичныеДанные.Записать(ИмяВременногоФайла);
Теперь пытаюсь посмотреть что у меня в PDF файле, ошибка открытия.
В чем может быть проблема?
1 Kassern
 
17.11.22
15:21
(0) Размер какой файла? Дайте угадаю - 0 байт?)
2 Галахад
 
гуру
17.11.22
15:22
Файл в строку, строку в поток? ))
3 Radion
 
17.11.22
15:24
(1) нет не нулевой, 1кб )
4 Radion
 
17.11.22
15:44
(2) Base64Строка(Данные.FilePDF.url) получаю Неопределено
5 hockeyist
 
17.11.22
15:44
(0) Записывать надо содержимое файла, а не его название
6 Builder
 
17.11.22
15:47
(0) Что за сервис? Маркетплейсы?
До этого как все получаешь?
7 Галахад
 
гуру
17.11.22
15:49
Как-то по простому не получается? Типа такого:

ВременныйФайл = ПолучитьИмяВременногоФайла("pdf");
ОтветHTTP = Соединение.Получить(HTTPЗапрос, ВременныйФайл);
8 Смотрящий
 
17.11.22
15:53
ВременныйФайл = ПолучитьИмяВременногоФайла("pdf");
ЗапросHTTP = Новый HTTPЗапрос(Данные.FilePDF.url);

Попытка
    ОтветHTTP = СоединениеHTTPOffice.Получить(ЗапросHTTP, ВременныйФайл);
Исключение КонецПопытки;

Если ТипЗнч(ОтветHTTP) = Тип("HTTPОтвет") Тогда
    Если ОтветHTTP.КодСостояния > 199 ИЛИ ОтветHTTP.КодСостояния < 301 Тогда
9 Radion
 
17.11.22
15:56
(5) (7) (8)  понял спасибо. буду пробовать.
Тогда вопрос, есть другой веб сервис, где вопрос решается 3 строками:
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
    ДвоичныеДанные = Base64Значение(URIСтр);
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
Почему в данном случае так? Спасибо.
10 Галахад
 
гуру
17.11.22
16:04
(9) Наверное потому что разные люди писали разные сервисы. ))
11 Kassern
 
17.11.22
16:27
(9) На некоторых платформах/компах не получается загрузить данные с ресурса, если это https протокол, так как явно не указан ssl сертификат. Поэтому лучше явно прописывать что вы хотите от внешнего сервиса:
HTTPСоединение
HTTPЗапрос
Ответ=HTTPСоединение.ВызватьHTTPМетод(...)
12 Gary417
 
17.11.22
16:27
(0) а пдф файл, это не бинарник разве? ему надо кодировку указывать специально? его utf не портит?
13 Kassern
 
17.11.22
16:28
Так же пдф файл может передаваться в теле ответа post методом. (9) Тут неявно вызывается Гет метод.
14 ildary
 
17.11.22
16:39
(9) Попробуйте такой финт ушами, мне помогло при чтении картинки из внешнего сервиса:

        ДвоичныеДанныеКартинки = Base64Значение(СтрокаКартинки);
        Если ДвоичныеДанныеКартинки = Неопределено Тогда
                
                ОстатокДеления = СтрДлина(СтрокаКартинки) % 4;
                Если ОстатокДеления = 1 Тогда
                        ВызватьИсключение "Неверная входная строка"; // Некорректно кодировано
                ИначеЕсли ОстатокДеления = 2 Тогда
                        СтрокаКартинки = СтрокаКартинки + "==";
                ИначеЕсли ОстатокДеления = 3 Тогда
                        СтрокаКартинки = СтрокаКартинки + "=";
                КонецЕсли;
                
                СтрокаКартинки = СтрЗаменить(СтрокаКартинки, "_", "/");
                СтрокаКартинки = СтрЗаменить(СтрокаКартинки, "-", "+");
                                СтрокаКартинки = СтрЗаменить(СтрокаКартинки, "+", "#43;");
                
                ДвоичныеДанныеКартинки = Base64Значение(СтрокаКартинки);
                
        КонецЕсли;
15 Kassern
 
17.11.22
16:41
(14) Только нужно изначально убедиться, что СтрокаКартинки не пустая. Я подозреваю, что ТС вообще данные с сервиса не получил.
16 ildary
 
17.11.22
16:58
(15) Согласен, но я не стал весь код приводить. А откуда ещё можно получить данные для Base64Значение, кроме как с сервиса?
17 Radion
 
17.11.22
16:59
Спасибо, всем большое. Получил наклейку по (8).
Благодарю!!!