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