Захотелось быстро и удобно закачивать файлы к себе на сервер, чтобы можно было передать кому-нибудь ссылку на файл или самому её использовать.
Сейчас, конечно, существует много всяких серверов для подобных целей, но проблема в том, что процесс загрузки достаточно долго — запустить браузер, зайти на сайт, закачать файл, скопировать ссылку. Плюс ещё часто даёт не прямая ссылка на файл, а ссылка на страницу скачивания, что часто вызывает вопросы от абонента «а где файл-то, тут какая-то фигня по ссылке». Зачастую ещё с рекламой и запросом номера телефона чтобы «быстро скачать».
Так как у меня есть свой сервер, я вполне могу не связываться с чужими без надобности. Но даже установив к себе скрипт файлообменника, процесс закачки изменится не сильно — придётся по прежнему запускать браузер и т.д.
Потому озаботился поисками решения, которое позволило бы в меню по правой кнопке мыши добавить пункт «закачать и получить ссылку».
Исходные данные — есть свой сервер. На нём запущены ftp-сервер и web-сервер.
Задача — за пару кликов закачать файл и получить на него ссылку в буфере обмена.
Покопался в интернетах — нашел практически готовое решение тут.
Здесь решил разместить чуть подправленный вариант под наши реалии:
@echo off
chcp 1251
set FILE=%1
set SCRIPT=%TEMP%\ftp.txt
echo open _ИМЯ_СЕРВЕРА_ > %SCRIPT%
echo _ИМЯ_ПОЛЬЗОВАТЕЛЯ_>> %SCRIPT%
echo _ПАРОЛЬ_>> %SCRIPT%
echo cd _ПОЛНЫЙ_ПУТЬ_К_ПАПКЕ_НА_СЕРВЕРЕ_ >> %SCRIPT%
echo type binary >> %SCRIPT%
echo put %FILE% >> %SCRIPT%
echo bye >> %SCRIPT%
ftp.exe -i -s:%SCRIPT%
del %SCRIPT%
echo http://_ИМЯ_СЕРВЕРА_/ПУТЬ_К_ПАПКЕ/%~nx1| clip
Как этим пользоваться (для тех, кому хочется пользоваться, но непонятно).
- Запускаете Блокнот, копируете туда текст скрипта, меняете переменные, сохраняете в удобном вам месте под _ИМЯ_ФАЙЛА_.cmd, выбрав в «Тип файла» «Все файлы» (иначе получите в итоге текстовый файл).
- Нажимаете комбинацию клавиш Win+R, должно появиться окошко «Выполнить». Там вводите «shell:sendto», нажимаете Ок.
- Откроется папка, которая отвечает за действия в меню «Отправить» правой кнопки мыши в Проводнике.
- Копируете в эту папку ваш файл или создаёте там ярлык для него (у меня это ярлык Upload).
Всё, можно пользоваться.
Как оно работает (для тех, кому хочется хоть что-то понять).
@echo off
Отключает вывод лишнего текста на экран.
chcp 1251
Устанавливает кодировку для нормальной работы с русскими именами файлов.
set FILE=%1
Переменной FILE присваивается имя файла из аргумента командной строки
set SCRIPT=%TEMP%\ftp.txt
Переменной SCRIPT присваивается имя временного файла, в котором будут храниться команды для ftp-клиента.
В этом варианте файл создаётся во временной папке, но если не нравится, то можно любой другой путь указать.
echo open _ИМЯ_СЕРВЕРА_ > %SCRIPT%
Начинается создание временного файла.
Подключение к серверу. Имя - просто доменное имя, www.server.ru, например.
echo _ИМЯ_ПОЛЬЗОВАТЕЛЯ_>> %SCRIPT%
echo _ПАРОЛЬ_>> %SCRIPT%
Дописываются имя пользователя и пароль. Обратите внимание, что не должно быть пробела между именем/паролем и знаками >>
echo cd _ПОЛНЫЙ_ПУТЬ_К_ПАПКЕ_НА_СЕРВЕРЕ_ >> %SCRIPT%
Полный путь к той папке, в которой будете хранить ваши файлы. Допустим, сайт у вас расположен в папке /var/www/mysite
Для файлов вы создаёте папку public, тогда полный путь будет /var/www/mysite/public
echo type binary >> %SCRIPT%
Передача файла в двоичном виде.
echo put %FILE% >> %SCRIPT%
Загрузка файла.
echo bye >> %SCRIPT%
Отключение от сервера.
ftp.exe -i -s:%SCRIPT%
Выполнение скрипта - загрузка файла происходит только на этом этапе.
del %SCRIPT%
Удаление временного файла.
echo http://_ИМЯ_СЕРВЕРА_/ПУТЬ_К_ПАПКЕ/%~nx1| clip
Отправка ссылки на файл в буфер обмена. Протокол - http или https, что у вас на сервере настроено.
Имя сервера - то же, что и в начале скрипта - www.server.ru
Путь к папке - уже относительно корня вашего сайта. То есть если ваш сайт открывается непосредственно по www.server.ru, то путь будет public и строка примет вид http://www.server.ru/public/%~nx1.
Если же для захода надо набирать www.server.ru/mysite - то http://www.server.ru/mysite/public/%~nx1
%~nx1 - имя файла, без полного пути.
|clip - передача строки программе clip, которая отправит её в буфер обмена.
Достоинства
- Работает
- Используются только встроенные средства windows, не надо ничего дополнительно устанавливать.
Недостатки
- Нет проверки существования файла на сервере, если уже был файл с таким именем — он будет перезаписан. Решаемо, к примеру, дописыванием к имени файла текущей даты и времени. Тогда все имена будут уникальны.
- Нельзя загрузить сразу несколько файлов. И не надо, в задаче один файл был.
- Имя и пароль пользователя хранятся открытым текстом в скрипте и временном файле. Если кто-то добрался до вашего компьютера и спокойно шарится по файлам, то украденный пароль от вашего ftp будет одной из наименьших проблем.
- Во время работы всплывает консольное окно. В свойствах ярлыка укажите «Запускать свернутым в значок». А вообще пропадание окна можно использовать как индикатор окончания загрузки.
Конечно, это самый простой и «костыльный» вариант, можно и более красивые решения придумать.
Но они потребуют гораздо больше времени на написание и отлаживание. Лично меня пока устраивает и этот.
Разве что всё же добавление даты в имя файла сделаю как-нибудь.