|   |   | 
| 
 | Не могу по 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). 
 Благодарю!!! | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |