Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как определить расширение файла при загрузке через 1С?

Как определить расширение файла при загрузке через 1С?
Я
   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, в котором идёт тип файла
   anchar007
 
2 - 25.06.19 - 09:53
(1) magic - это что?
   Вафель
 
3 - 25.06.19 - 09:59
делай через http соединение.
анализируй заголовки
   anchar007
 
4 - 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);
    КонецЕсли;
    
    Результат = Новый Структура;
    Результат.Вставить("Схема", Схема);
    Результат.Вставить("Логин", Логин);
    Результат.Вставить("Пароль", Пароль);
    Результат.Вставить("ИмяСервера", ИмяСервера);
    Результат.Вставить("Хост", Хост);
    Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено));
    Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
    
    Возврат Результат;
    
КонецФункции

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.