Как получить процесс получения файлов ?

Работа с файлами и базами данных
Ответить
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Как получить процесс получения файлов ?

Сообщение Sergey Ivanov »

Всем привет.
Хочу скачивать файл из интернета. У меня это получилось сделать. Но хотелось бы видеть процесс скачивания файла (интернет везде разный, как и размер файла). Сейчас этого не видно. Как это можно реализовать ?
загрузка.JPG
86.vi
(12.12 КБ) 284 скачивания
Последний раз редактировалось Sergey Ivanov 09 фев 2015, 14:22, всего редактировалось 2 раза.
Добро пожаловать на http://rk-stud.ru/
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Как получить процесс получения файлов ?

Сообщение Borjomy_1 »

Может, сначала делать "DataSocket Open", а потом "Read", "Read", "Read"?
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Как получить процесс получения файлов ?

Сообщение Sergey Ivanov »

так если я так сделаю, то как я узнаю когда мне остановить чтение ? я же не могу узнать размер скачиваемого файла и не могу задать количество скачиваемых байт за раз.
Добро пожаловать на http://rk-stud.ru/
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Как получить процесс получения файлов ?

Сообщение dadreamer »

Sergey Ivanov, как раз размер файла вам и нужен. А также нужен Event, передающий в программу число загруженных байт. Размер можно получить запросом HEAD, например, так. Есть и отдельный :vi: для этого: http://zone.ni.com/reference/en-XX/help ... ient_head/ А вот эвент, насколько знаю, можно создать через ActiveX. Посмотрите пример C:\Program Files (x86)\National Instruments\LabVIEW 2013\examples\Connectivity\ActiveX\ActiveX Event Callback.vi. Там же можно попробовать другие эвенты, возможно, вам понадобятся DownloadBegin, DownloadComplete, ProgressChange. Посмотрите ещё в поиске по такому запросу.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Как получить процесс получения файлов ?

Сообщение dadreamer »

Заинтересовала меня тема ТС, т.к. я в своё время делал простенький download manager на Delphi с помощью компонентов Indy и Synapse. Решил попробовать сделать аналогичное на :labview: . Но не тут-то было. В сообщении выше я немного поспешил, как оказалось, IE'шный компонент WebBrowser не подходит для скачки файлов. Во-первых, выдаёт каждый раз диалоговое окно для сохранения файла и весь процесс скачки выполняется в нём. Это никак не настроить. Во-вторых, грузит установленные плагины/аддоны, такие как Flash Player и Adobe PDF, в результате pdf файл открывается в Adobe PDF Reader'е прямо в окне компонента. И контроль над загрузкой файла в :labview: уже не получить. И в-третьих, индикатор прогресса меняется при загрузке каждого элемента, если это web-страница, то он будет скакать при загрузке каждой картинки, скрипта, html, css.
На удивление, никаких нормальных решений для скачки с прогресс баром для :labview: нет. Попадались старые :vi: OpenG HTTP, которые уже не работают, так и не понял, что с ними не так. Есть дополнение Internet Toolkit для LabVIEW 2011/2012, построенное на TCP инструментах :labview: . Посмотрев на внутренности, я решил ничего там не менять, ибо муторно, долго и не факт, что заработает. Ещё пара решений с форума NI тоже оказалась на TCP :vi: , и тоже корректно не работала. А если создавать download manager на TCP, на это могут уйти дни, а то и недели.
Поискав, наткнулся на консольную утилиту WGet. Вроде бы, всё что нужно, присутствует. И файлы способна качать, и выводит прогресс. Однако вывод идёт в консоль, а библиотек к ней нет. Так что ещё в LabVIEW нужно с консолью взаимодействовать - опять дополнительные сложности. Я почти сдался, подумав, что некоторые вещи на LabVIEW не реализовать. То, что в Delphi или C/C++ делалось парой строк кода, здесь оказалось невозможным.
И вдруг наткнулся на решение на .NET. Довольно несложный код, и я набросал в :labview: его за пару часов. Получился он малось вытянутым в графическом плане, но довольно функциональным. Что интересно, всё сразу заработало после нажатия Run. Файл сразу же начал загружаться и прогресс бар стабильно отобразил полосу загрузки. В качестве иллюстрации скрин панели:
ProgressBar.jpg
Так что, можно сказать, задача оказалась выполнена на 100% :crazy: И как вывод - даже в :labview: нет невозможных вещей, нужно лишь приложить достаточно усилий. :wink:
P.S. Тестовые файлы разных размеров для проверки закачки можно взять здесь.
Вложения
Http_Downloader.vi
LV2011
(31.82 КБ) 277 скачиваний
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Как получить процесс получения файлов ?

Сообщение Sergey Ivanov »

Спасибо за пример !

Немножко обновил его, добавил скорость )
Снимок.JPG
Вложения
Http_Downloader.vi
(23.38 КБ) 310 скачиваний
Добро пожаловать на http://rk-stud.ru/
Ответить

Вернуться в «Сохранение данных»