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

Работа с файлами и базами данных

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

Postby Sergey Ivanov on 09 Feb 2015, 12:10

Всем привет.
Хочу скачивать файл из интернета. У меня это получилось сделать. Но хотелось бы видеть процесс скачивания файла (интернет везде разный, как и размер файла). Сейчас этого не видно. Как это можно реализовать ?

загрузка.JPG

86.vi
(12.12 KiB) Downloaded 184 times
Last edited by Sergey Ivanov on 09 Feb 2015, 14:22, edited 2 times in total.
Добро пожаловать на http://rk-stud.ru/
User avatar
Sergey Ivanov
expert
expert
 
Posts: 1193
Joined: 01 Mar 2009, 20:54
Location: Санкт-Петербург, Кронштадт
Medals: 5
Activity (1) Professionalism (1) Gold (2) Автор (1)
LabVIEW Version: 2013
Karma: 117
hardware VIP

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

Postby Borjomy_1 on 09 Feb 2015, 13:19

Может, сначала делать "DataSocket Open", а потом "Read", "Read", "Read"?
Borjomy_1
expert
expert
 
Posts: 1809
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 318
VIP

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

Postby Sergey Ivanov on 09 Feb 2015, 13:47

так если я так сделаю, то как я узнаю когда мне остановить чтение ? я же не могу узнать размер скачиваемого файла и не могу задать количество скачиваемых байт за раз.
Добро пожаловать на http://rk-stud.ru/
User avatar
Sergey Ivanov
expert
expert
 
Posts: 1193
Joined: 01 Mar 2009, 20:54
Location: Санкт-Петербург, Кронштадт
Medals: 5
Activity (1) Professionalism (1) Gold (2) Автор (1)
LabVIEW Version: 2013
Karma: 117
hardware VIP

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

Postby dadreamer on 09 Feb 2015, 15:22

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. Посмотрите ещё в поиске по такому запросу.
User avatar
dadreamer
professor
professor
 
Posts: 3099
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 781
I/O VIP vision internet

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

Postby dadreamer on 14 Feb 2015, 14:43

Заинтересовала меня тема ТС, т.к. я в своё время делал простенький 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. Тестовые файлы разных размеров для проверки закачки можно взять здесь.
Attachments
Http_Downloader.vi
LV2011
(31.82 KiB) Downloaded 184 times
User avatar
dadreamer
professor
professor
 
Posts: 3099
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 781
I/O VIP vision internet

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

Postby Sergey Ivanov on 14 Feb 2015, 18:41

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

Немножко обновил его, добавил скорость )

Снимок.JPG
Attachments
Http_Downloader.vi
(23.38 KiB) Downloaded 207 times
Добро пожаловать на http://rk-stud.ru/
User avatar
Sergey Ivanov
expert
expert
 
Posts: 1193
Joined: 01 Mar 2009, 20:54
Location: Санкт-Петербург, Кронштадт
Medals: 5
Activity (1) Professionalism (1) Gold (2) Автор (1)
LabVIEW Version: 2013
Karma: 117
hardware VIP


Return to Сохранение данных

Who is online

Users browsing this forum: No registered users and 1 guest

cron