Имя: Пароль:
1C
1С v8
WEB Передать файл с клиента на сервер
0 dimm7310
 
12.08.15
13:34
в продолжение темы WEB Передать десятки файлов с сервера на клиент

задача усложнилась, теперь нужно с веб клиента передать на сервер файл. Пытаюсь на клиенте поместить файл во временное хранилище и передать адрес на сервер, но выдает ошибку - "Не найден конструктор"

пробовал на клиенте

ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла))

я так понимаю, что ругается на "Новый ДвоичныеДанные"

кто знает как обойти проблему ?
1 ДенисЧ
 
12.08.15
13:44
Ну нету двоичных данных на веб-клиенте...
2 wildivan
 
12.08.15
16:11
Например так:

&НаКлиенте
Процедура ПрикрепитьФайл(Команда)
    
    #Если ВебКлиент Тогда
    Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
        УстановитьРасширениеРаботыСФайлами();
        ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    #КонецЕсли

    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    
    ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ОбработкаВыбораФайла",ЭтотОбъект));
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбораФайла(Результат, Параметры) Экспорт
    Если Результат<>Неопределено Тогда
        ПутьКФайлу = Результат[0];
        Объект.ИмяФайла = ДополнительныеОбъекты.ПолучитьИмяФайла(ПутьКФайлу);
        
        #Если НЕ ВебКлиент Тогда
            ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
            ПрикрепитьФайлСервер(ДвоичныеДанные);
        #Иначе
            ПомещаемыеФайлы = Новый Массив;
            ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу, ""));
            ПомещенныеФайлы = Новый Массив;
            Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, ,
                                        Ложь, УникальныйИдентификатор) Тогда
                Сообщить("Ошибка прикрепления файла: " + ОписаниеОшибки());    
            Иначе
                ПрикрепитьФайлСервер(ПомещенныеФайлы, Истина);
            КонецЕсли;    
        #КонецЕсли                                                                  
    КонецЕсли;    
КонецПроцедуры    

&НаСервере
Процедура ПрикрепитьФайлСервер(Данные, ЭтоВебКлиент = Ложь)        
    Если ЭтоВебКлиент Тогда
        АдресПрикрепленныйФайл = Данные[0].Хранение;
        ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресПрикрепленныйФайл);
    Иначе
        ДвоичныеДанные = Данные;
    КонецЕсли;

    Об = РеквизитФормыВЗначение("Объект");
    Об.Хранилище = Новый ХранилищеЗначения(ДвоичныеДанные);
    Об.Размер = ДвоичныеДанные.Размер();
    Если НЕ ЗначениеЗаполнено(Об.Наименование) Тогда
        Об.Наименование = Об.ИмяФайла;
    КонецЕсли;        
    Об.ДатаДобавления = ТекущаяДата();
    Об.Записать();
    ЗначениеВРеквизитФормы(Об, "Объект");                   
КонецПроцедуры
3 dimm7310
 
12.08.15
16:21
(2) спавибо
4 dimm7310
 
12.08.15
17:17
(2) в каком случае процедура ПоместитьФайлы() может не отработать и будет вызвана ПрикрепитьФайлСервер()  ?
5 dimm7310
 
13.08.15
09:09
пока закомментировал вызов ПрикрепитьФайлСервер().

при попытке принять файл на стороне сервере выдает ошибку "не правильный путь к файлу"

пробовал так:

&НаКлиенте
Процедура Сформировать(Команда)
#Если ВебКлиент Тогда
    Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
        УстановитьРасширениеРаботыСФайлами();
        ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
#КонецЕсли    

ПомещенныеФайлы = Новый Массив;
    #Если НЕ ВебКлиент Тогда
        
        ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
        ПрикрепитьФайлСервер(ДвоичныеДанные);
    #Иначе
        
        ПомещаемыеФайлы = Новый Массив;
        ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, ""));
        Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, ,
            Ложь, УникальныйИдентификатор) Тогда
            Сообщить("Ошибка прикрепления файла: " + ОписаниеОшибки());    
        КонецЕсли;    
    #КонецЕсли      
    СформироватьНаСервере(ПомещенныеФайлы);



&НаСервере
Процедура СформироватьНаСервере(мсФайлы)    АдресФайлаБазы = мсФайлы[0].Хранение;
    ФайлБазы = ПолучитьИзВременногоХранилища(АдресФайлаБазы);
6 dimm7310
 
13.08.15
09:42
все разобрался, сам затупил и ниже еще раз пытался ПолучитьИзВременногоХранилища уже полученный файл


спасибо  wildivan, за подсказку . Конечно лучше было кинуть ссылку на статью из которой приведен код, так бы сразу снялись первые вопросы.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.