Что такое решение Django/Python для обеспечения одноразового URL для людей для загрузки файлов?

Не используйте выражение запроса. Используйте перегрузка Select, который передает Вас индекс :

var list = FileList.Select((file, index) => new { Index=index, Filename=file });

5
задан Brent O'Connor 21 September 2009 в 15:33
поделиться

2 ответа

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

Но это, безусловно, возможно сделать с помощью Django. Вот краткое описание основного подхода:

  • Настройте URL-адрес django для обслуживания этих файлов.
  • Используйте параметр GET, который представляет собой уникальную строку, чтобы определить, какой файл получить.
  • Сохраните таблицу базы данных, в которой есть FileField для загружаемого файла. Эта таблица сопоставляет уникальные строки с расположением файла в файловой системе.
  • Чтобы использовать файл в качестве загрузки, установите заголовки ответов в представлении следующим образом:

( путь равен расположение файла для обслуживания)

with open(path, 'rb') as f:
    response = HttpResponse(f.read())
response['Content-Type'] = 'application/octet-stream';
response['Content-Disposition'] = 'attachment; filename="%s"' % 'insert_filename_here'
return response

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

3
ответ дан 14 December 2019 в 19:19
поделиться

Вы можете просто использовать что-нибудь простое, например mod_xsendfile . Эта функция также доступна на других популярных веб-серверах, таких как lighttpd или nginx .

Она работает следующим образом: при включении ваше приложение (например, простой PHP-скрипт) может отправлять специальный ответ заголовок, в результате чего веб-сервер будет обслуживать статический файл.

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

2
ответ дан 14 December 2019 в 19:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: