Вход | Регистрация
 
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 или кнопку "Обновить" в браузере.