Быстрая закачка файла на сервер и получение ссылки в буфере обмена

Захотелось быстро и удобно закачивать файлы к себе на сервер, чтобы можно было передать кому-нибудь ссылку на файл или самому её использовать.
Сейчас, конечно, существует много всяких серверов для подобных целей, но проблема в том, что процесс загрузки достаточно долго — запустить браузер, зайти на сайт, закачать файл, скопировать ссылку. Плюс ещё часто даёт не прямая ссылка на файл, а ссылка на страницу скачивания, что часто вызывает вопросы от абонента «а где файл-то, тут какая-то фигня по ссылке». Зачастую ещё с рекламой и запросом номера телефона чтобы «быстро скачать».

Так как у меня есть свой сервер, я вполне могу не связываться с чужими без надобности. Но даже установив к себе скрипт файлообменника, процесс закачки изменится не сильно — придётся по прежнему запускать браузер и т.д.
Потому озаботился поисками решения, которое позволило бы в меню по правой кнопке мыши добавить пункт «закачать и получить ссылку».

Исходные данные — есть свой сервер. На нём запущены 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

Как этим пользоваться (для тех, кому хочется пользоваться, но непонятно).

  1. Запускаете Блокнот, копируете туда текст скрипта, меняете переменные, сохраняете в удобном вам месте под _ИМЯ_ФАЙЛА_.cmd, выбрав в «Тип файла» «Все файлы» (иначе получите в итоге текстовый файл).
  2. Нажимаете комбинацию клавиш Win+R, должно появиться окошко «Выполнить». Там вводите «shell:sendto», нажимаете Ок.
  3. Откроется папка, которая отвечает за действия в меню «Отправить» правой кнопки мыши в Проводнике.

  4. Копируете в эту папку ваш файл или создаёте там ярлык для него (у меня это ярлык 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 будет одной из наименьших проблем.
  • Во время работы всплывает консольное окно. В свойствах ярлыка укажите «Запускать свернутым в значок». А вообще пропадание окна можно использовать как индикатор окончания загрузки.

Конечно, это самый простой и «костыльный» вариант, можно и более красивые решения придумать.
Но они потребуют гораздо больше времени на написание и отлаживание. Лично меня пока устраивает и этот.
Разве что всё же добавление даты в имя файла сделаю как-нибудь.

Originally published at banshee.ms. You can comment here or there.