Скрипт подключить ftp как диск
FTP ресурс как диск в Windows
Организовал себе сетевое хранилище дома. На домашних компьютерах сразу подцепил его как сетевой диск и захотелось такой же диск на работе. Естественно, из интернета доступ к сетевому хранилищу будет через FTP. Маршрут на роутере прописал и доступ к нему по FTP с работы получил. Тут я и наткнулся на грабли, стандартными средствами Windows нельзя подключить FTP сервер как диск.
Стандартными средствами Windows можно только сделать ярлык на этот FTP, при открытие которого по сути будет открываться Internet Explorer. Это меня не устраивало, ибо нужно было подцепить именно как диск с буквой. Есть несколько программ, которые способны подключать FTP сервера как диски в Windows (например FTPdrive), но все они страдают одной проблемой - невозможность нормального запуска файлов прямо с FTP диска, то бишь либо их вообще нельзя запускать, либо они страдают кэшированием файла перед открытием, особенно это заметно при попытках смотреть видео с FTP диска.
Поскольку сайт авторов на буржуйском языке, постараюсь поподробнее описать её вам.
Как я уже говорил утилита работает через командную строку. И имеет следующий синтаксис:
Описание параметров:
devicename
Задает имя подключаемого/отключаемого диска
ftphostname
Задает имя, IP адрес или IPv6 адрес FTP сервера, который надо подключить
remotepath
Задает имя удаленной папки, которая будет использоваться родительская папка создаваемого диска
password
Задает пароль необходимый для подключения к FTP серверу
/USER
Задает имя пользователя для авторизации на FTP сервере
/NOPASSIVE
Создает активное соединение с FTP сервером (active mode)
/OWNERACCESSONLY
Делает созданный диск доступным только из приложения запустившем FTPUSE
/PORT
Задает TCP номер порта который будет использоваться для соединения с FTP сервером. TCP порт 21 используется по умолчанию.
/DEBUG
Режим отладки.
/DELETE
Удаляет подключенный диск.
Вот пример просто подключения к FTP без пароля
А вот пример подключения к моему сетевому хранилищу дома
Если закрыть окно с которого запускался FTPUSE диск отключится.
Для запуска в фоне можно использовать следующие команды:
© 2022 Legion Leonhart. При полном или частичном копировании материалов сайта - активная ссылка на сайт обязательна.
Обращаются ко мне с жалобой, что компьютер грузится минут 15 (после бегунка Windows появляется черный экран и так он висит минут 15, потом таки Windows довольно шустро загружается), но после этого вроде всё нормально работает. Такое конечно бывает, но смущало что компьютер довольно новый.
Исправляем ошибку истекшего сертификата R3 при использовании Let's Encrypt
Syntax
FTPUSE devicename [ftphostname[/remotepath] [password]]
[/USER:username]
[/NOPASSIVE]
[/OWNERACCESSONLY]
[/PORT:portnumber]
[/HIDE]
[/DEBUG]
[[/DELETE]]
Смена материнской платы без переустановки Windows
Поскольку моя жизнь тесно связана с компьютерами, мой домашний питомец (компьютер) как и рабочий, довольно часто меняют свою конфигурацию. Меняю по разным причинам, устаревание, недостаток мощности, какие то эксклюзивные примочки и просто ради интереса потестить новую железку.
Последние обновления
Завершение
Я расчитываю, что эта статья поможет тем, кому тоже придётся писать свой ftp-клиент в первый раз, как и мне. Не претендую на то, что решение идеально. И это мой первый опыт написания статей на хабр, поэтому я открыт для критики и комментариев.
Обращаются ко мне с жалобой, что компьютер грузится минут 15 (после бегунка Windows появляется черный экран и так он висит минут 15, потом таки Windows довольно шустро загружается), но после этого вроде всё нормально работает. Такое конечно бывает, но смущало что компьютер довольно новый.
Удаление папки . (три точки)
Иногда приходится встречаться с ситуацией когда в корне диска появляется папка . (три точки) и удаляться она никак не хочет. Чаще всего начинают кричать про вирусы, но в моем случае, причиной появления такой папки был всегда Total Commander при работе с архивами.
Подключение FTP стандартными средствами Windows
В Windows можно стандартными средствами подключить ftp как сетевой диск, но такой сетевой диск будет работать только из проводника (explorer), в командной строке он будет не доступен.
Опишу, как стандартными средствами подключить ftp в качестве сетевого диска.
Жмем правой кнопкой мышки на иконке "Мой компьютер" и выбираем в контекстном меню пункт "Подключить сетевой диск. ". В открывшемся окне жмем на " Подключение к веб-сайту, на котором вы можете хранить документы и изображения ":
В следующих двух окнах жмем по кнопка "Далее" и указываем адрес ftp-сервера:
Снова жмем кнопку далее, снимаем галочку возле "Анонимный вход" и указываем ftp-логин, жмем кнопки далее, готово.
В конце у Вас запросит пароль, вводим его и ставим галочку "Сохранить пароль", чтобы каждый раз его не вводить.
Теперь в проводнике можно заходить на ftp-сервер как на обычный сетевой диск, без каких-либо ftp-клиентов. Но такой вариант подключения ftp в качестве сетевого диска мне не подошел, так как не могу к нему обращаться через командную строку.
Последние обновления
Смена материнской платы без переустановки Windows
Поскольку моя жизнь тесно связана с компьютерами, мой домашний питомец (компьютер) как и рабочий, довольно часто меняют свою конфигурацию. Меняю по разным причинам, устаревание, недостаток мощности, какие то эксклюзивные примочки и просто ради интереса потестить новую железку.
Requirements
FTPUSE needs drivers, and so it is distributed as an installation package. The installer includes DOKAN file system drivers and the FTPUSE application. FTPUSE runs under: Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008, Windows 8, Windows Server 2012, Windows 10; x64 or x86.
Меняем SPD модулей памяти DDR2 и DDR3
Принесли мне в жертву для обновления старенький Macbook 13 mid 2010 для обновления. Процедура стандартная - расширяем память до 8Gb DDR3, ставим SSD и обновляем Mac OS. С последними двумя пунктами проблем не возникло, а вот с первым всё оказалось не так просто - имеющиеся у меня на руках планки.
Windows Command to Mount a Remote Share as a Local Hard Drive using the FTP protocol
The FTPUSE command maps a remote share (FTP server) as a local drive, so you can use the FTP server of your choice as a local hard drive. FTPUSE is a free application which was developed during production of the endpoint backup solution Ferro Backup System, but disks mapped using FTPUSE can be accessed by any application (e.g. Windows Explorer, Total Commander, MS-DOS command shell).
Загрузка файлов в несколько потоков
"client" в коде выше — это экземпляр класса FTPClient, занимающегося только загрузкой файлов с сервера. И по факту FTPClient — моя обертка FtpWebRequest.
FTPClient имеет в себе потокобезопасную очередь, называемую «очередью загрузки»:
Итак, что происходит при вызове метода DownloadFile:
Всё довольно просто — файл добавляется в очередь на загрузку, и вслед за этим вызывается метод, который создает задачу по загрузке файла, используя TPL. Вот как это выглядит:
Говоря русским языком, сначала проверим сколько уже работает тасков по загрузке файла, и если есть возможность пропихнуть ещё один. Затем пытаемся получить FileItem из очереди загрузки, если очередь не пуста. Потом определяем, присутствует ли файл уже локально, или нет. А локально присутствовать файл может в том случае, если загрузка неожиданно прервалась. Всё, что мы успели скачать, остаётся на диске. Так вот, в этом случае мы просто начнём загрузку с того места, на котором остановились.
Метод OnTaskComplete, который вызовется после завершения DownloadTask:
То есть уменьшим счетчик активных загрузок, и попробуем начать новый таск загрузки. То есть, получается что новый таск на загрузку будет создаваться при добавлении нового файла в очередь загрузки и при завершении текущего таска на загрузку.
Теперь метод, занимающийся непосредственно загрузкой файла с сервера:
И метод, который формирует запрос к серверу и возвращает ответ:
То есть, чтобы начать чтение потока не с начала, используется строка при формировании запроса: ё
А ограничение скорости работает следующим образом: первым делом расчитаем downloadLimit, сколько байт может загрузить текущий поток. Учитывается общее ограничение скорости и количество активных потоков загрузки. Затем читаем поток 1024 байта. Засекли, сколько времени это заняло (timePassed). Общее количество считанных байт записывается в downloadedBytes.
При превышении лимита ставим поток на паузу на оставшееся время до конца секунды:
По истечению секунды счётчики обнуляются.
И в случае WebExeption файл снова добавится в очередь загрузки. А в историю файл попадёт только после успешного завершения.
Не работает сканирование QR кода на устройствах Apple с настроенным профилем
Если ваши устройства Apple настроены с помощью профилей MDM или Apple Configurator, то вы можете столкнуться с ситуацией что они не считывают QR код. Проявляется это если у вас настроен список разрешенных приложений.
Исправляем ошибку истекшего сертификата R3 при использовании Let's Encrypt
Не работает сканирование QR кода на устройствах Apple с настроенным профилем
Если ваши устройства Apple настроены с помощью профилей MDM или Apple Configurator, то вы можете столкнуться с ситуацией что они не считывают QR код. Проявляется это если у вас настроен список разрешенных приложений.
FTP ресурс как диск в Windows
Организовал себе сетевое хранилище дома. На домашних компьютерах сразу подцепил его как сетевой диск и захотелось такой же диск на работе. Естественно, из интернета доступ к сетевому хранилищу будет через FTP. Маршрут на роутере прописал и доступ к нему по FTP с работы получил. Тут я и наткнулся на грабли, стандартными средствами Windows нельзя подключить FTP сервер как диск.
Стандартными средствами Windows можно только сделать ярлык на этот FTP, при открытие которого по сути будет открываться Internet Explorer. Это меня не устраивало, ибо нужно было подцепить именно как диск с буквой. Есть несколько программ, которые способны подключать FTP сервера как диски в Windows (например FTPdrive), но все они страдают одной проблемой - невозможность нормального запуска файлов прямо с FTP диска, то бишь либо их вообще нельзя запускать, либо они страдают кэшированием файла перед открытием, особенно это заметно при попытках смотреть видео с FTP диска.
Поскольку сайт авторов на буржуйском языке, постараюсь поподробнее описать её вам.
Как я уже говорил утилита работает через командную строку. И имеет следующий синтаксис:
Описание параметров:
devicename
Задает имя подключаемого/отключаемого диска
ftphostname
Задает имя, IP адрес или IPv6 адрес FTP сервера, который надо подключить
remotepath
Задает имя удаленной папки, которая будет использоваться родительская папка создаваемого диска
password
Задает пароль необходимый для подключения к FTP серверу
/USER
Задает имя пользователя для авторизации на FTP сервере
/NOPASSIVE
Создает активное соединение с FTP сервером (active mode)
/OWNERACCESSONLY
Делает созданный диск доступным только из приложения запустившем FTPUSE
/PORT
Задает TCP номер порта который будет использоваться для соединения с FTP сервером. TCP порт 21 используется по умолчанию.
/DEBUG
Режим отладки.
/DELETE
Удаляет подключенный диск.
Вот пример просто подключения к FTP без пароля
А вот пример подключения к моему сетевому хранилищу дома
Если закрыть окно с которого запускался FTPUSE диск отключится.
Для запуска в фоне можно использовать следующие команды:
© 2022 Legion Leonhart. При полном или частичном копировании материалов сайта - активная ссылка на сайт обязательна.
Меняем SPD модулей памяти DDR2 и DDR3
Принесли мне в жертву для обновления старенький Macbook 13 mid 2010 для обновления. Процедура стандартная - расширяем память до 8Gb DDR3, ставим SSD и обновляем Mac OS. С последними двумя пунктами проблем не возникло, а вот с первым всё оказалось не так просто - имеющиеся у меня на руках планки.
Периодический опрос сервера и получение списка файлов
Решение периодического опроса сервера приходит на ум почти сразу — запустить таймер, в котором будет заключён метод получения списка файлов. Однако, сервер имеет немного своеобразную структуру каталогов. Если говорить коротко, то на сервере есть две папки — notify и files. В папке files хранятся сами данные, которые требуется скачать, и все они имеют уникальные имена по типу FILE_ID_xxx, где х — любая цифра. Папка notify содержит xml-файлы с описанием файлов из папки files, в т. ч. их настоящее имя, дату размещения на сервере и размер.
Прочитав все xml из папки notify, я формирую коллекцию из нехитрого FileItem:
А далее, пробегаясь по коллекции, проверяем, присутствует ли файл в истории загрузок, и не загружается ли он в данный момент
Вот и всё. Опрос сервера и поиск новых файлов закончен. О том, кто такие FileHistory и client — напишу далее.
Удаление папки . (три точки)
Иногда приходится встречаться с ситуацией когда в корне диска появляется папка . (три точки) и удаляться она никак не хочет. Чаще всего начинают кричать про вирусы, но в моем случае, причиной появления такой папки был всегда Total Commander при работе с архивами.
Download
Download FTPUSE (freeware): Go to Download page
Other information
FTPUSE uses the DOKAN file system driver created by Hiroki Asakawa. It is similar in operation to the CurlFtp command present in Linux, which uses the FUSE driver. FTP USE can complement the NET USE command, which can be used to map network resources but does not support FTP.
Решил немного усовершенствовать свой powershell скрипт, который реализует охрану при помощи wifi-камеры. Решил записывать на ftp-сервер видео-поток с камеры, когда дома никого нет. То есть кроме оповещения по email (когда вдруг что-то зашевелилось в кадре), видео будет постоянно записываться.
Для этого мне понадобилось подключить ftp-сервер, так, чтобы он стал доступен из командной строки как диск или папка.
Download
Download FTPUSE (freeware): Go to Download page
The FTPUSE command syntax is similar to NET USE syntax, as follows:
Постановка задачи
Подумав, я решил написать клиент, который работает по следующей схеме:
- Стучимся на сервер, получаем список файлов.
- Смотрим в свою историю загрузок, если файл отсутствует в истории, то добавляем файл в очередь загрузки.
- Если файл по каким-то причинам не удалось скачать, он отправляется в конец очереди загрузки.
- Успешно загруженный файл добавляется в историю.
- История хранится runtime и дублируется в xml-файл, откуда можно будет восстановить историю
- Клиент поддерживает загрузку нескольких файлов одновременно в разных потоках
Parameters
devicename
Sets the name of the device to be connected to or disconnected from an FTP share
ftphostname
Sets the name, IP address or IPv6 address of the FTP server you want to connect to
remotepath
Sets the name of a remote folder to be used as the main folder for the mapped drive
password
Sets the password required to access the FTP server
/USER
Sets the user name to be used to log onto the remote computer
/NOPASSIVE
Establishes an active connection with the FTP server (active mode)
/OWNERACCESSONLY
The mapped drive will be accessible only from the application from which FTPUSE was launched
/PORT
Sets the TCP port number which should be used to connect to the FTP server. TCP port 21 is used by default
/HIDE
Hides the program console
/DEBUG
Debug mode.
/DELETE
Deletes the established connection with the FTP Server.
Подключение FTP через FTPUSE
После установки утилиты чтобы подключить сетевой диск нужно ввести команду (покажу на своем примере):
В работе программы есть два нюанса:
- на подключенном диске всегда будет отображаться 512 МБ свободного места, не зависимо от того, сколько там его осталось. Но мне это не мешает.
- если закрыть окно командной строки из которого запускался FTPUSE, то диск размонтируется. Мне это не мешает, так консоль у меня всегда запущена. Если же окно все-таки хочется скрыть, то запускаем FTPUSE вот такой командой:
Ну и краткая информация о параметрах FTPUSE:
FTPUSE devicename [ftphostname[/remotepath] [password]]
[/USER:username]
[/NOPASSIVE]
[/OWNERACCESSONLY]
[/PORT:portnumber]
[/DEBUG]
[[/DELETE]]
- devicename - имя подключаемого/отключаемого диска
- ftphostname - адрес FTP сервера
- remotepath - имя удаленной папки, которая будет использоваться родительская папка создаваемого диска
- password - пароль для подключения к FTP серверу
- /USER - логин на FTP сервере
- /NOPASSIVE - активное соединение с FTP сервером (active mode)
- /OWNERACCESSONLY - делает созданный диск доступным только из приложения запустившем FTPUSE
- /PORT - номер порта FTP-сервера. Порт 21 используется по умолчанию.
- /DEBUG - отладка.
- /DELETE - удаление смонтированого диска.
Далее скриншот подключенных дисков, тот, который з буквой "U" подключен через ftpuse и доступен из командной строки как обычный локальный диск:
Хочу поделиться своим опытом в разработке автономного ftp клиента.
В наличии имеется ftp-сервер, на котором периодически появляются данные в виде графических изображений и текстовых файлов, их размер варьируется от десятков килобайт до пары гигабайт. Доступ в интернет может быть через провод, а может быть через GSM-свисток или вообще по спутнику, то есть стабильным и нестабильным соответственно. Во втором случае резко повышается вероятность потери соединения из-за погодных условий, географического положения и т.п.
Итак, требования к клиенту следующие:
- Опрос ftp-сервера на наличие новых файлов и их последующая загрузка.
- В случае внезапной остановки загрузки (будь то обрыв соединения, или упадёт система, на которой стоит мой ftp-клиент), закачка должна продолжиться при первой возможности.
- Ограничение скорости загрузки (это связано со стоимостью трафика по GSM).
История загрузок
Хранение истории загрузок в файле пригодится на тот случай, если приложение вдруг перезапустится, и история, хранимая runtime будет потеряна.
Внутри класс FileHistory имеет коллекцию, хранящую в себе FileItem, которые мы уже успешно скачали:
Добавление файла происходит очень просто — мы добавляем файл в коллекцию и сразу записываем изменения в xml:
И вот что происходит, когда мы хотим проверить наличие файла в истории:
Поясню — вот вызывается метод проверки. И записей в нашей коллекции ноль. Вероятно, приложение падало, и история утерялась. На этот случай попытаемся восстановить историю из xml. Если это не удается (файл отсутствует или повреждён) — считаем, что мы этот файл ещё не загружали.
Examples
To execute the command in the background, type:
To delete the mapped disk drive, type:
FTPUSE F: /DELETE
Читайте также: