|
Как определить расширение файла при загрузке через 1С? | ☑ | ||
---|---|---|---|---|
0
anchar007
25.06.19
✎
09:41
|
Всем доброго дня!
Из 1С на клиенте пытаюсь сохранить файл во временные файлы по ссылке вида: https://mydomen.com/load_file.php?upload_file_id=2437114 Сохраняю так: ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла); КопироватьФайл("https://mydomen.com/load_file.php?upload_file_id=2437114",ИмяВременногоФайла); Но этот код работает только тогда, когда расширение файла заранее известно, а если не известно, то сохраняется файл с расширением tmp. Если поменять расширение этого временного файла (например на png) то открывается картинка. Проблема в том, что по ссылке может быть не только png. К примеру браузер по этой ссылке сразу предлагает загрузить картинку с расширением png, т.е. он перед загрузкой каким-то образом анализирует файл. Как сделать то же самое из 1С? |
|||
1
ДенисЧ
25.06.19
✎
09:49
|
Через копироватьФайл - никак.
Если только через magic определять. А если надо - читай средствами HTTP, там есть X-Application, в котором идёт тип файла |
|||
2
anchar007
25.06.19
✎
09:53
|
(1) magic - это что?
|
|||
3
Вафель
25.06.19
✎
09:59
|
делай через http соединение.
анализируй заголовки |
|||
4
anchar007
25.06.19
✎
10:33
|
Спасибо!
Если вдруг кому-нибудь понадобится: Из переменной Результат можно распарсить расширение: У меня Результат.Заголовки.Получить("Content-Type") это строка "image/jpg" &НаКлиенте Процедура ПолучитьФайлПоСсылке() СтруктураURI = СтруктураURI("https://mydomen.com/load_file.php?upload_file_id=2437114"); ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(); HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост,СтруктураURI.Порт,,,,30,ЗащищенноеСоединение,ЛОЖЬ); HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере); Попытка Результат = HTTPСоединение.Получить(HTTPЗапрос); Исключение Сообщить("Произошла сетевая ошибка!"); КонецПопытки; КонецПроцедуры &НаКлиенте Функция СтруктураURI(Знач СтрокаURI) Экспорт СтрокаURI = СокрЛП(СтрокаURI); // схема Схема = ""; Позиция = Найти(СтрокаURI, "://"); Если Позиция > 0 Тогда Схема = НРег(Лев(СтрокаURI, Позиция - 1)); СтрокаURI = Сред(СтрокаURI, Позиция + 3); КонецЕсли; // строка соединения и путь на сервере СтрокаСоединения = СтрокаURI; ПутьНаСервере = ""; Позиция = Найти(СтрокаСоединения, "/"); Если Позиция > 0 Тогда ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); КонецЕсли; // информация пользователя и имя сервера СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; Позиция = Найти(СтрокаСоединения, "@"); Если Позиция > 0 Тогда СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); КонецЕсли; // логин и пароль Логин = СтрокаАвторизации; Пароль = ""; Позиция = Найти(СтрокаАвторизации, ":"); Если Позиция > 0 Тогда Логин = Лев(СтрокаАвторизации, Позиция - 1); Пароль = Сред(СтрокаАвторизации, Позиция + 1); КонецЕсли; // хост и порт Хост = ИмяСервера; Порт = ""; Позиция = Найти(ИмяСервера, ":"); Если Позиция > 0 Тогда Хост = Лев(ИмяСервера, Позиция - 1); Порт = Сред(ИмяСервера, Позиция + 1); КонецЕсли; Результат = Новый Структура; Результат.Вставить("Схема", Схема); Результат.Вставить("Логин", Логин); Результат.Вставить("Пароль", Пароль); Результат.Вставить("ИмяСервера", ИмяСервера); Результат.Вставить("Хост", Хост); Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено)); Результат.Вставить("ПутьНаСервере", ПутьНаСервере); Возврат Результат; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |