|
Загрузка файла на сервер, прогресс | ☑ | ||
---|---|---|---|---|
0
Nikoss
25.01.13
✎
10:18
|
Есть тонкий клиент, по кнопке передаю файл на сервер. Можно ли как-то проследить сколько уже загружено? Хочу сделать полоску загрузки на стороне клиента. Как сделать саму полоску варианты есть, а вот как понять сколько, допустим Кбайт, загружено уже, не понятно.
Вообще делаю так: помещаю на клиенте в ХранилищеЗначений этот самый файл, потом передаю на серную функцию параметром, а на сервере записываю на локальный диск уже методом Записать для двоичных данных из ХранилищаЗначений |
|||
1
Cube
25.01.13
✎
10:19
|
(0) Если делать по методике 1С (не дергать сервер 100 раз в секунду), то такое взлетит только в клиент-серверном варианте работы.
|
|||
2
Cube
25.01.13
✎
10:21
|
+(1) Ой, я не правильно прочел (0). Ты ещё до этого этапа не дошел))
|
|||
3
Nikoss
25.01.13
✎
10:24
|
(1), (2), проще так: мне нужно в определенный момент времени узнать какой объем данных (процент, или байт, или чего там еще, без разницы) передан уже на сервер.
по прогрессбару пока не заморачиваться. |
|||
4
Cube
25.01.13
✎
10:28
|
(3) А что значит "передан на сервер"? Код покажи, что ли...
|
|||
5
Reset
25.01.13
✎
10:31
|
Никак, по моему.
Через заднее место - разбить файл на 10 частей, передавать по одной - будет процент с шагом 10. |
|||
6
Nikoss
25.01.13
✎
10:41
|
&НаКлиенте
ХранилищеКартинки = МодульНаКлиенте.ПоместитьФайлВХранилищеЗначений(ДиалогОткрытияФайла.ПолноеИмяФайла, УникальныйИдентификатор); ПопыткаСкопироватьФайл(Расширение, ХранилищеКартинки, УникальныйИдентификатор) &НаСервереБезКонтекста Функция ПопыткаСкопироватьФайл(Расширение, ХранилищеКартинки, УникальныйИдентификатор) ДвоичныеДанныеКартинки = ПолучитьИзВременногоХранилища(ХранилищеКартинки); Откуда = КаталогВременныхФайлов() + УникальныйИдентификатор + Файл; ДвоичныеДанныеКартинки.Записать(Откуда); КонецФункции Примерно так, думаю смысл понятен. Только не знаю когда передается на сервер, в момент запуска функции, или в момент ПолучитьИзВременногоХранилища(ХранилищеКартинки)... |
|||
7
Cube
25.01.13
✎
10:47
|
(6) В этом случае никак.
|
|||
8
Nikoss
25.01.13
✎
10:48
|
(7) а в каком случае "как"? :)
|
|||
9
Nikoss
25.01.13
✎
10:48
|
(5), если других вариантов не будет, можно и этот рассмотреть. Коряво конечно, и вызовов сервера прибавится...
Только как разбивать? |
|||
10
Cube
25.01.13
✎
10:53
|
(8) Случаев множество) Но для твоей задачи - никак.
|
|||
11
Nikoss
25.01.13
✎
10:56
|
(10) жаль. Может логику сей операции поменять как-то, чтобы появились варианты? Или ничего не поможет?
|
|||
12
H A D G E H O G s
25.01.13
✎
10:56
|
Можно
|
|||
13
H A D G E H O G s
25.01.13
✎
10:56
|
Base64Строка()
Base64Значение() |
|||
14
Cube
25.01.13
✎
10:57
|
(11) Ну, если хранить данные не в БД, а в папке на сервере, то, мне кажется, будут варианты...
|
|||
15
Ayvengo
25.01.13
✎
11:00
|
(0) почитай тут http://infostart.ru/public/157706/
|
|||
16
Ayvengo
25.01.13
✎
11:01
|
+ (15) правда это только по прогрессбару на сервере :(
|
|||
17
Nikoss
25.01.13
✎
11:11
|
(14), так она так и есть
|
|||
18
Nikoss
25.01.13
✎
11:12
|
(13), как это поможет?
|
|||
19
Reset
25.01.13
✎
11:34
|
(18) Он предлагает аналог (5) (преобразовав файл в строку и, разбив её, передавать по частям)
|
|||
20
Ayvengo
25.01.13
✎
11:35
|
Мне кажется, что это изврат :) Проще внешнюю компоненту какую-нибудь стырить или написать ;)
|
|||
21
hhhh
25.01.13
✎
11:49
|
можно по предыдущим загрузкам собрать статистику и потом выводить прогресс-бар по секундам
|
|||
22
Nikoss
25.01.13
✎
12:19
|
(21), не, такой вариант мне вообще не нравится. Именно хочется видеть как идет загрузка в реале. Часто бывает что интернет лагнет и тонки виснет наглухо, и не понятно то ли он все еще файл грузит, то ли повис.
|
|||
23
Nikoss
25.01.13
✎
12:21
|
Как думаете, если сделать вот этим:
Base64Строка() Base64Значение() Разбить строку на 10 частей, перекинуть на сервер с выводом прогресс бара по 10%. На сколько это увеличит время работы? |
|||
24
Reset
25.01.13
✎
12:22
|
(23) На время преобразования туда/сюда + накладные расходы на 9 лишних вызовов сервара
|
|||
25
oleg_km
25.01.13
✎
12:24
|
Вообщето есть функция РазделитьФайл и ОбъединитьФайлы если это так нужно
|
|||
26
Nikoss
25.01.13
✎
13:13
|
(24) ну так вот я и спрашиваю, на сколько это увеличит время. Или так не получится даже примерно прикинуть? Если на 20-%, то думаю не критично.
|
|||
27
zladenuw
25.01.13
✎
13:17
|
(0) может для клиента который загружает файл хранить его статус обработки. на сервере вносишь. клиенту отображаешь.
|
|||
28
H A D G E H O G s
25.01.13
✎
13:21
|
(26) На проценты.
|
|||
29
H A D G E H O G s
25.01.13
✎
13:22
|
(25) Нильзя.
|
|||
30
acsent
25.01.13
✎
13:23
|
вообще то бейз 64 в 2 раза больше чем сырые данные
|
|||
31
Kreont
25.01.13
✎
13:24
|
А через метод системы не получится сделать копирование, что б ОСь сама показала окно копирования?
|
|||
32
H A D G E H O G s
25.01.13
✎
13:24
|
(30) в 1,33333 раза
|
|||
33
H A D G E H O G s
25.01.13
✎
13:25
|
(30) Но и жмуться они точно также лучше.
|
|||
34
H A D G E H O G s
25.01.13
✎
13:25
|
(31) Колосок мне в носок, гениально!
|
|||
35
zladenuw
25.01.13
✎
13:28
|
(31) а отмену запретить можно ?
|
|||
36
Kreont
25.01.13
✎
13:30
|
Да я так просто как вариант предложил, самому пока не надо :)
Хотя хоть на делфи+гугль можно прогу написать за 5 мин., с параметрами откуда, куда, и с запретом отмены. |
|||
37
H A D G E H O G s
25.01.13
✎
13:35
|
(35) (36) ППЦ лютый.
|
|||
38
Ахиллес
25.01.13
✎
13:42
|
А Если порезать бинарник RARом например, без сжатия, чтоб побыстрее. Порежет быстро, можно хоть на 100 частей порезать, за свободным местом только на диске следить надо если файл большой.
|
|||
39
oleg_km
25.01.13
✎
13:55
|
(29) Почему нельзя, тонкий клиент сервер вроде можно?
|
|||
40
H A D G E H O G s
25.01.13
✎
14:01
|
(39) Есть еще веб клиент.
|
|||
41
Nikoss
28.01.13
✎
11:48
|
&НаКлиенте
Процедура ОтправитьФайлНаСервер(Команда) ДиалогОткрытияФайла = МодульНаКлиенте.ДиалогВыбораФайлаНаКлиенте(); Если ДиалогОткрытияФайла.Выбрать() Тогда ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла); СтрокаBase64Файла = Base64Строка(ДвоичныеДанныеФайла); Делитель = Окр(СтрДлина(СтрокаBase64Файла) / 10) + 1; К = 1; Состояние("Загрузка файла на сервер...", 0); Для Н = 1 По 10 Цикл НаСервер(Сред(СтрокаBase64Файла, К, Делитель), УникальныйИдентификатор, Н); Состояние("Загрузка файла на сервер...", Н * 10); К = К + Делитель; КонецЦикла; ВосстановитьИЗаписатьФайл(УникальныйИдентификатор); КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста Процедура НаСервер(ЧастьСтроки, УникальныйИдентификатор, НомерПакета) МенЗап = РегистрыСведений.ПробныйРегBase.СоздатьМенеджерЗаписи(); МенЗап.УникальныйИдентификатор = УникальныйИдентификатор; МенЗап.НомерПакета = НомерПакета; МенЗап.Строка = ЧастьСтроки; МенЗап.Записать(); КонецПроцедуры &НаСервереБезКонтекста Процедура ВосстановитьИЗаписатьФайл(УникальныйИдентификатор) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПробныйРегBase.НомерПакета КАК НомерПакета, | ПробныйРегBase.Строка |ИЗ | РегистрСведений.ПробныйРегBase КАК ПробныйРегBase |ГДЕ | ПробныйРегBase.УникальныйИдентификатор = &УникальныйИдентификатор | |УПОРЯДОЧИТЬ ПО | НомерПакета"; Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); СтрокаДляВосстановления = ""; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СтрокаДляВосстановления = СтрокаДляВосстановления + ВыборкаДетальныеЗаписи.Строка; КонецЦикла; ДвоичныеДанные = Base64Значение(СтрокаДляВосстановления); Если ДвоичныеДанные <> Неопределено Тогда ДвоичныеДанные.Записать("C:\1111\ляляля.png"); КонецЕсли; КонецПроцедуры Собственно так все работает. Только писать в регистр - это бред. Как можно по другому? Какую то "хитрую" переменную создать? |
|||
42
Nikoss
28.01.13
✎
11:59
|
Странно как-то себя ведет сообщение (41), если просто зайти в тему, его не видно, нужно жать "Все сообщения"... или это у меня лагает что-то?
|
|||
43
Cube
28.01.13
✎
12:01
|
(41) Так тебе же в хранилище надо писать? Ну так и пиши в хранилище. Проверка успешности загрузки проста: Если в хранилище строка, то недогрузили.
|
|||
44
H A D G E H O G s
28.01.13
✎
12:01
|
(41) Открой для себя ВременноеХранилище.
|
|||
45
H A D G E H O G s
28.01.13
✎
12:02
|
И ни в чем себе не отказывай.
|
|||
46
Nikoss
28.01.13
✎
12:22
|
&НаСервереБезКонтекста
Процедура НаСервер(ЧастьСтроки, УникальныйИдентификатор) ПоместитьВоВременноеХранилище(ЧастьСтроки, УникальныйИдентификатор); СодержимоеВременногоХранилища = ПолучитьИзВременногоХранилища(УникальныйИдентификатор); КонецПроцедуры На ПолучитьИзВременногоХранилища ругается - не правильный путь к файлу... что не так? |
|||
47
Nikoss
28.01.13
✎
12:24
|
(46), ай... не дочитал СП... отбой.
|
|||
48
Nikoss
28.01.13
✎
14:44
|
что-то все совсем печально по скорости
|
|||
49
H A D G E H O G s
28.01.13
✎
15:11
|
(48) Если у тебя, когда нажимаешь "О программе" видно, что
Режим: Веб-сервер (сжатие: усиленное) то все должно быть нормально. |
|||
50
Nikoss
28.01.13
✎
15:43
|
Так если у меня локально разница в 3-5 раз, не думаю что какое-то сжатие поможет. Или я ошибаюсь? Просто нормально не получается по тестить на веб, интернет не стабильный.
|
|||
51
zladenuw
28.01.13
✎
15:45
|
(50) так в настройках поставь имитировать задержку. и проверяй локально.
|
|||
52
H A D G E H O G s
28.01.13
✎
15:49
|
(51) Локально - сжатия не будет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |