Как сделать временную ссылку на скачивание

Содержание
  1. Поделиться ссылкой
  2. Какими файлами и папками можно делиться
  3. Как долго работает ссылка
  4. Посмотреть число просмотров и скачиваний по ссылке
  5. Не могу создать ссылку
  6. Не скачивается файл
  7. Создание одноразовых URL-адресов
  8. 1. Постановка задачи
  9. 2. Создание одноразовых ссылок
  10. 3. Проверка ссылок
  11. После прочтения сжечь. Делаем одноразовые ссылки на голом Nginx
  12. Как сделать ссылку на скачивание файла
  13. Как на сайте сделать скачивание файла
  14. Скачивание архивов
  15. HTML атрибут download
  16. Текстовая ссылка
  17. Скачать через кнопку
  18. Кнопка с иконкой
  19. Скачивание файла при клике на изображение
  20. Со стилями CSS
  21. Новая функция облачного хранилища: создание ссылок для загрузки файлов
  22. Предыстория
  23. Создание ссылки
  24. Страница загрузки
  25. Настройки ссылок
  26. Типы ссылок
  27. Простая загрузка
  28. Добавление времени загрузки в имя файла
  29. Добавление уникального идентификатора в название файла
  30. Загрузка в уникальную папку
  31. Загрузка в папку по дате
  32. Загрузка в папку по часам
  33. Загрузка с указанным именем
  34. Временные ограничения
  35. Дополнительные возможности
  36. Для разработчиков
  37. Для системных администраторов
  38. Резервное копирование
  39. Послесловие

Поделиться ссылкой

Чтобы поделиться файлом или папкой, нужно сгенерировать для них ссылку прямого доступа.

Выберите файл или папку, которой вы хотите поделиться.

Также вы можете поделиться с помощью мобильного приложения (см. инструкции для Android или для iOS) и программы для компьютера (см. инструкции для Windows и macOS).

Если вы поделились ссылкой на файл или папку с другим пользователем Диска, он может просмотреть и сохранить ваш файл или папку на свой Яндекс.Диск.

Какими файлами и папками можно делиться

Делиться можно файлами и папками, которые лежат в корневом каталоге Диска и во всех созданных вами папках. Если вы хотите поделиться файлом, приложенным к письму, сначала скопируйте его из папки Почтовые вложения (на вкладке Архив на панели слева) в нужную папку на Диске.

Нельзя поделиться файлами и папками, которые лежат внутри общей папки, если вы не ее владелец и имеете право доступа только на просмотр.

Как долго работает ссылка

Ссылка на файл или папку будет работать до тех пор, пока вы не закроете к ним доступ. Если вы опубликуете тот же самый файл или папку еще раз, Диск сгенерирует новую ссылку. Но если файл уже опубликован и вы снова получаете публичную ссылку на него с помощью программы для компьютера или мобильного приложения, то это будет та же самая ссылка, что была сгенерирована при публикации этого файла.

Посмотреть число просмотров и скачиваний по ссылке

Не могу создать ссылку

Возможно, на вашем Диске закончилось место.

Не скачивается файл

Иногда при работе с Диском перестают работать кнопки, не загружаются элементы страницы, не открываются фото, не скачиваются файлы или браузер сообщает об ошибке.

Почему это происходит и как это исправить:

Скачивание публичного файла ограничено

Чтобы уменьшить расход трафика, браузер сохраняет копии посещенных страниц в кэше. Когда вы повторно просматриваете страницы, браузер может загружать их данные из памяти. Например, если вы измените имя файла через программу для компьютера, а браузер загрузит из памяти информацию об этом файле, вы увидите неактуальное имя файла.

Попробуйте обновить страницу, чтобы принудительно загрузить ее из интернета. Если проблема не решится, очистите кэш браузера и удалите все файлы cookie.

Расширения блокируют Яндекс.Диск

Диск может работать некорректно из-за дополнений и расширений в браузере. Чтобы проверить это, временно отключите их. Если Диск работает неправильно из-за блокировщика рекламы или расширения-антивируса, добавьте страницу Диска в исключения этого расширения. Подробнее см. в разделах Настроить блокировщики рекламы, Настроить исключения для сайтов.

Включена блокировка данных в браузере

Выключите блокировку данных по инструкции для вашего браузера:

Источник

Создание одноразовых URL-адресов

Дата публикации: 2014-01-13

От автора: при разработке веб-приложений иногда возникает задача создания одноразовых ссылок для пользователей. То есть ссылок, которые можно использовать только один раз. Такие ссылки можно использовать как для скачивания различного материала на Вашем сайте, так и для активации нового зарегистрированного пользователя. Поэтому в данном уроке мы с Вами рассмотрим создание одноразовых ссылок на примере ссылки для скачивания файла.

1. Постановка задачи

Для начала давайте условимся, что одноразовую ссылку мы будем создавать для скачивания файла. Данный файл будем хранить в папке file и это обычное изображение, которое необходимо для примера.

Далее, создание одноразовой ссылки заключается в генерации уникальной строки, которую необходимо передать в специальный файл обработчик. Данный файл выполнит необходимые проверки и если ссылка верна (уникальная строка), значит, откроется доступ для скачивания файла. Конечно, для каждого пользователя необходимо создавать отдельную ссылку, и поэтому все созданные ссылки необходимо где то хранить. В качестве хранилища ссылок можно выбрать или базу данных, или обычный текстовый файл. Мы в данном уроке будем использовать текстовый файл для хранения созданных ссылок.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

И последнее, необходимо обеспечить одноразовое использование ссылки. То есть, любую созданную ссылку, пользователь сможет использовать не более одного раза. При повторном использовании ссылки, доступ на скачивание файла необходимо запретить. Теперь давайте приступим к реализации поставленной задачи.

2. Создание одноразовых ссылок

Итак, на локальном компьютере в папке lessons, я создал папку onetime, в которой мы будем хранить наш будущий скрипт. То есть путь к папке с скриптом будет следующий: //localhost/lessons/onetime/

Теперь, давайте создадим новый файл, под названием get_hash.php, который будет генерировать уникальную строку и тем самым формировать одноразовую ссылку, для скачивания файла. Первым делом, генерируем уникальную строку:

Читайте также:  Как правильно сделать омбре на темные волосы

Теперь, созданную строку необходимо сохранить в файле, поэтому, давайте откроем текстовый файл для записи:

Для открытия файла для записи используем функцию fopen(). Которая открывает файл в определенном режиме. Мы будем работать в режиме a, то есть, открываем файл только для записи и указатель перемещаем в конец файла (если мы вызываем функцию в первый раз, то открываемый файл будет создан).

Теперь, для предотвращения появления ошибок, связанных с постоянным обращением к файлу, необходимо блокировать его на время записи данных. То есть при генерации ссылки, выполняется запись уникальной строки в файл. Затем, мы с Вами будем постоянно считывать данные файла, для проверки правильности строк. При этом могут возникать ошибки при многочисленных обращениях к файлу в один и тот же момент времени (то есть запись и считывание данных происходит практически одновременно). Поэтому перед записью данных мы с Вами заблокируем файл функцией flock():

Напомню, что данная функция накладывает блокировку на файл. Режим работы которой, задается константами, передаваемыми вторым параметром к данной функции. Режим LOCK_EX – накладывает эксклюзивную блокировку (запись). И при этом все возможные обращения файлу будут запрещены, то есть пока он заблокирован. Кроме записи данных в файл из нашего скрипта, что собственно мы и выполним:

Для записи мы используем функцию fwrite, и записываем сгенерированную уникальную строку. Теперь давайте разблокируем файл, то есть, разрешим обращение к нему из вне, и закроем файл:

Для разблокировки доступа к файлу, мы используем функцию flock(), и передаем константу LOCK_UN, то есть снятие блокировок. Теперь, давайте несколько раз обновим скрипт и посмотрим, что записалось в файл:

Как Вы видите, данные в файл успешно записаны. Теперь необходимо сформировать ссылку и отобразить ее на экране для пользователя:

Ваша ссылка для скачивания

Как Вы видите, ссылка выводится, уникальная строка генерируется и записывается в текстовый файл. Значит, мы все сделали правильно. Теперь на всякий случай приведу полный код файла, get_hash.php:

Ваша ссылка для скачивания

Теперь необходимо создать скрипт, который получит передаваемые данные и выполнит необходимые проверки.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

3. Проверка ссылок

Итак, создаем пустой файл get_file.php, в котором мы будем проверять правильность ссылки и если все верно, предоставлять доступ для скачивания файла. Первым делом, создаем две переменные, которые будут содержать имя файла для скачивания (ссылку на который мы создаем), и имя файла с уникальными строками ссылок:

Затем, создаем переменную, которая будет содержать разрешение на скачивание файла. То есть, если значение данной переменной равно TRUE, значит, необходимо разрешить скачивание ссылки:

Данный в этот файл передаются методом GET (через адресную строку), значит в суперглобальном массиве GET, будет создана ячейка hash. Поэтому, сохраним значение данной ячейки, так же в отдельной переменной:

Теперь, так как мы знаем, что уникальная строка, получена с помощью шифрования md5, значит уникальная строка должна содержать ровно 32 символа. Поэтому, давайте выполним первую проверку:

Теперь считаем файл с уникальными строками и все его содержимое построчно, сохраним в ячейках массива:

Поэтому, открываем файл для записи в режиме w (открывает файл только для записи и помещает указатель в начало файла и обрезает файл до нулевой длины.):

Источник

После прочтения сжечь. Делаем одноразовые ссылки на голом Nginx

Предполагается, что у вас уже есть настроенный nginx в такой же «комплектации», следовательно, ниже будет описываться лишь настройка нескольких location, которые вы добавите в свою секцию server конфига nginx.

В моём случае все временные файлы будут храниться в папке /var/www/upload по пути вида /random_folder_name/filename, где в качестве random_folder_name будет рандомная строка из нужного нам количества байт, потому создаём location вида:

Проверяем, что загрузка и удаление файлов и папок работает командами в консоли

Для того, чтобы оградить свой сервер от неконтролируемого потока загружаемых файлов, добавим проверку токена, который мы будем передавать заголовком Token. В конфиге это будет выглядеть следующим образом

Сам токен можно сгенерировать в консоли командой вида

Снова проверяем, командами в консоли, что загрузка и удаление файлов и папок работает, но только при наличии в запросе заголовка Token

Загружать и удалять файлы мы научились, но для того, чтобы скачивать файлы мы заведём отдельный location

Проверяем, что получение файлов работает командой в консоли

Теперь мы научились загружать и безопасно получать, но нам нужно сделать так, чтобы они удалялись сразу после скачивания, а для этого мы заведём отдельный location

И вызывать этот location мы будем из location

Выглядит вполне прилично, но я, как и писал выше, крайне не рекомендую использовать то, что непонятно как работает и не задокументировано. Именно поэтому я надеюсь, что никто не будет использовать это решение «в бою»

Теперь всё хорошо, ибо файлы мы можем загрузить, скачать, и после скачивания они удаляются, но полученные ссылки невозможно передавать в мессенджерах, т.к. боты делают запросы по этим ссылкам в надежде получить контент и сгенерировать превью, что приводит к тому, что файл сразу же удаляется, а получатель при переходе по ссылке наблюдает 404 вместо заветного файла.
Для решения этой проблемы мы воспользуемся тем, что будем отправлять получателю не прямую ссылку на скачивание файла, а ссылку на промежуточную страницу, и сделаем это также только благодаря возможностям «коробочного» Nginx.
Первым делом создаём ещё один location, который будет отдавать html-файл

Читайте также:  Как в ворде сделать линию тренда

Самое важное в этом location — деректива «ssi on;». Именно с помощью ngx_http_ssi_module мы будем отдавать динамический html, как бы странно эта фраза не звучала.
Создаём в папке /var/www тот самый файл download.html с содержимым следующего вида

Теперь вместо того, чтобы отдавать прямую ссылку на скачивание вида example.com/download/random_folder_name/filename, мы будем передавать ссылку на промежуточную страницу. Ссылка на эту страницу будет выглядеть как example.com/get/random_folder_name/filename, при переходе на неё файл останется целым и невредимым, т.к. для его скачивания необходимо будет кликнуть на кнопку. А для большей уверенности, что боты не перейдут по ссылке с этой страницы, добавим в location

^/download/… проверку заголовка Referer, чтобы файл отдавался только в том случае, если он действительно был скачан с промежуточной страницы

Итоговый конфиг в моём случае выглядит следующим образом

UPD: Статья обновлена 18.01.2018. Всем, кто ранее успел настроить подобное у себя, настоятельно рекомендую внести соответствующие изменения, руководствуясь обновлённой статьёй.

Источник

Как сделать ссылку на скачивание файла

Как правильно сделать ссылку, чтобы при клике на неё начиналось скачивание файла. Атрибут download для HTML-тега ссылки. Примеры ссылок для скачивания.

Как сделать скачивание файла с сайта.

Не редкость когда нужно бывает создать ссылку для скачивания какого то файла. При этом желательно чтобы это была прямая ссылка для скачивания, а не на внешний сайт (облако, хранилище).

Для скачивания можно передавать файлы самых различных форматов: музыка, видео, текстовые файлы, Excel, архивы и мн. другие.

Как на сайте сделать скачивание файла

Возможно вы хотите поделиться с посетителями вашего сайта каким либо файлом, при этом файл может быть самого любого формата.

Делается это при помощи ссылки на файл с использованием специального HTML тега. Про то как создавать обычные ссылки есть статья: как сделать ссылку

Ниже пойдёт речь о том как сделать ссылку для скачивания файла.

Скачивание архивов

Для файлов-архивов (форматы zip, rar и т.д.) достаточно просто указать ссылку на файл который нужно передать для скачивания. Поэтому здесь применяется обычный HTML тег ссылки:

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

HTML атрибут download

Структура ссылки для скачивания в html строится следующим образом:

Вместо знака решётки # указываем ссылку на файл передающийся для скачивания.

В атрибуте download ничего указывать не нужно. Браузер поймёт что файл нужно скачивать, а не открывать.

Со всплывающей подсказкой:

В кавычках атрибута title прописываем текст всплывающей подсказки.

*Обязательно не забываем переключить редактор в режим HTML чтобы редактировать теги

Текстовая ссылка

Результат: скачать файл

Скачать через кнопку

Результат:

Есть такой инструмент как Генератор кнопок, где просто генерировать кнопки с тегом скачивания и иконками.

Кнопка с иконкой

Так же можно добавить к тексту ссылки иконочный шрифт, если он установлен у вас на сайте. При этом шрифтовую иконку можно поставить перед или после текста ссылки.

Код вставки иконки

Результат:

Скачивание файла при клике на изображение

Результат:

Со стилями CSS

Так же можно применять все свойства CSS и изменять размер шрифта, название, цвет и т.д.

Для этого добавляем атрибут style=» «

Результат:

Источник

Новая функция облачного хранилища: создание ссылок для загрузки файлов

Итак, в нашем облачном хранилище появилась новая функция: создание ссылок для загрузки. Создав такую ссылку, вы можете отправить ее любому стороннему пользователю, чтобы он загрузил свои файлы к вам – совершенно бесплатно. Вовсе не обязательно даже, чтобы этот пользователь имел учетную запись в хранилище.

Предыстория

Недавно я участвовал в восхождении на Эльбрус. У всех участников группы, в том числе и у меня, были с собой фотоаппараты. Было сделано много интересных и красивых фотографий, и после похода встал вопрос: как сделать так, чтобы они были доступны всем участникам?

Кто-то предлагал загрузить все снимки ВКонтакте или на Facebook, кто-то — на Mail.Ru, кто-то — на другие файлообменники… Но все перечисленные сервисы нам не подходили: во-первых, на них имеются ограничения на размер загружаемых файлов; во-вторых, не все участники группы были на этих сервисах зарегистрированы.

Я предложил простое и удобное для всех решение: создал в облачном хранилище Selectel публичный контейнер, включил опцию листинга файлов. Затем создал ссылку, перейдя по которой каждый смог загрузить в контейнер собственные фотографии, а также скачать фотографии, сделанные другими участниками. При этом никому из участников группы не потребовалось заводить в хранилище учетную запись. Так была протестирована новая функция нашего облачного хранилища — создание ссылки для загрузки файлов сторонними пользователями. Мои товарищи по восхождению на Эльбрус оценили ее на «отлично».

Сегодня мы представляем эту функцию широкой аудитории. Надеемся, что все наши пользователи оценят ее по достоинству.

Создание ссылки

Рассмотрим на простейшем примере, как работает новая функция. Создадим специальный контейнер для загрузки файлов и назовем его, например, share. Затем откроем меню контейнера и выберем пункт «Ссылка на загрузку файлов»:

Откроется окно настроек ссылки:

Страница загрузки

Пользователь, получивший от вас ссылку и открывший ее в браузере, увидит следующую страницу:

На странице поддерживается одновременная параллельная загрузка трех файлов, и за счет этого процесс загрузки существенно ускоряется:

Если какие-либо файлы необходимо удалить, то это можно сделать в течение 10 минут после завершения загрузки.

Настройки ссылок

Типы ссылок

Как уже было сказано выше, при создании ссылки нужно выбрать ее тип. Мы предусмотрели несколько типов ссылок, адаптированных под различные варианты использования. Рассмотрим каждый тип ссылок более подробно.

Читайте также:  Венки осенние на дверь своими руками

Простая загрузка

Подходит для ситуаций, когда вам необходимо получить файлы от одного или нескольких пользователей. Файлы будут загружены в указанный контейнер или папку, и вы сможете получить доступ к ним как через веб-панель, так и другими способами.

Добавление времени загрузки в имя файла

При выборе этого варианта к имени загружаемого файла будут добавлены дата и время загрузки. Например, если вы загрузите файл myphoto.jpg, он будет сохранен как myphoto_20130830_12h43m53s.jpg.
Это может быть полезным при сохранении резервных копий, а также в случаях, когда доступ к ссылке для загрузку предоставлен большому количеству пользователей, и нужно исключить совпадения в именах загружаемых файлов.

Добавление уникального идентификатора в название файла

При выборе этого варианта к имени файла будет добавлен уникальный идентификатор. Например, файл myphoto.jpg после загрузки будет переименован в myphoto_cmrsm2ks.jpg.
Такой тип ссылки подходит при реализации загрузки пользовательского контента на сайты (в данном случае полезным будет также включить опцию игнорирования исходного названия файла): данное пользователем имя будет отклонено, а новое имя файла будет соответствовать его уникальному идентификатору.

Загрузка в уникальную папку

При выборе этого типа ссылки файлы во время каждого сеанса загрузки будут сохранятся в отдельную папку. Например, файл myphoto.jpg будет сохранен в папку с именем cmrsm2ks. Если вы после загрузки этого файла закроете страницу загрузки, а затем снова закроете ее и загрузите другие файлы, то они будут сохранены в другой папке, имя которой будет сгенерировано автоматически; для следующего сеанса загрузки будет также создана отдельная папка, и т.п.

Загрузка в папку по дате

Этот режим работы хорошо подходит для загрузки резервных копий. Загружаемые файлы будут сохраняться в папку с текущей датой в названии. Например, архив mysql.dump.bz2 после загрузки будет доступен как 2013-08-30/mysql.dump.bz2.

Загрузка в папку по часам

Этот режим в целом аналогичен предыдущему; единственное отличие заключается в том, что к имени папки помимо даты будет добавлено еще и время (час) загрузки. Архив mysql.dump.bz2 будет доступен как 2013-08-30_15/mysql.dump.bz2.

Загрузка с указанным именем

Этот тип ссылки больше подходит для использования через API для приложений или сайтов.
Ссылка будет действительна только для одной загрузки, а загруженный файл будет переименован по имени самой ссылки. Например, если ссылка имела вид xxx.selcdn.ru/container/you_photo.jpg, то после загрузки файл будет доступен в хранилище под именем you_photo.jpg, а ссылка перестанет действовать.

Временные ограничения

При создании ссылки для загрузки можно устанавливать временные ограничения:


Это очень гибкая и полезная опция. Она позволяет, во-первых, ограничить время действия самой ссылки. По истечении указанного вами срока сторонние пользователи не смогут загружать файлы в хранилище. Такая возможность может оказаться полезной в ситуациях, когда необходимо принимать документы от пользователей через Интернет к определенному сроку (например, при приеме заявок на конференции и конкурсы).

Во-вторых, с ее помощью можно устанавливать срок хранения загруженных файлов. Вы можете задать конкретный период времени, в течение которого будут храниться файлы от пользователя, получившего от вас ссылку для загрузки. По окончании этого периода все файлы будут автоматически удалены. Такая функциональность будет полезной, например, для организации загрузки и хранения резервных копий.

Дополнительные возможности

Для разработчиков

Управление ссылками может осуществляться через API и совместимо с Openstack Swift API. Используя библиотеки для работы с Openstack Swift API, вы можете легко создавать и настраивать ссылки для загрузки файлов в наше хранилище непосредственно из собственных приложений и сайтов.

С помощью ссылок для загрузки можно реализовать возможность загрузки контента со стороннего сайта в наше хранилище.
Вот простой пример:

Форма для загрузки файлов:

Для системных администраторов

Функция создания ссылок на загрузку может оказаться полезной для быстрой загрузки файлов с сервера в хранилище, а также для настройки резервного копирования.

Для загрузки файла нужно сначала создать в веб-панели ссылку, а после этого выполнить в консоли управления сервером следующую команду, используя утилиту curl:

Можно также организовать передачу данных через именованный канал (pipe), без сохранения в файл:

Еще одна интересная возможность — многопоточная загрузка файлов из определенной папки; это будет гораздо быстрее, чем с помощью нашей утилиты supload:

Резервное копирование

Новая функция существенно упрощает процедуру резервного копирования: теперь не обязательно для каждого сервера или сайта создавать отдельные контейнеры; не нужно создавать дополнительных пользователей, количество которых ограничено. Чтобы обеспечить загрузку и хранение резервных копий, необходимо просто создать защищенную паролем ссылку и соответствующим образом ее настроить.

Создание ссылок на загрузку резервных копий позволяет решить целый ряд проблем, которые раньше требовали значительных усилий.

Во-первых, это сортировка загруженных резервных копий по дате и времени. Чтобы все загруженные файлы автоматически сортировались или переименовывались в соответствии с датой и временем, достаточно просто создать ссылку соответствующего типа.

Во-вторых, это автоматическое удаление резервных копий по истечении срока хранения. Срок хранения можно установить двумя способами: установить строго заданное время и время по умолчанию. Второй вариант позволяет изменять срок хранения в процессе загрузки.

Резервное копирование через ссылки для загрузки можно легко встроить в системы автоматического резервного копирования, которые очень часто поддерживают выполнение внешней команды после создания архива с копией данных.

Послесловие

Мы будем рады любым замечаниям, пожеланиям, предложениям и обязательно учтем их в дальнейшей работе.
Для тех кто не может комментировать посты на Хабре, приглашаем к нам в блог.

Источник

Оцените статью
Как сделать своими руками
Adblock
detector