Имя: Пароль:
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, за подсказку . Конечно лучше было кинуть ссылку на статью из которой приведен код, так бы сразу снялись первые вопросы.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший