Не используйте выражение запроса. Используйте перегрузка Select
, который передает Вас индекс :
var list = FileList.Select((file, index) => new { Index=index, Filename=file });
Отличная идея. Однако я бы предостерегал от метода однократной загрузки, поскольку нет гарантии, что их первая попытка загрузки будет успешной. Может быть, вместо этого использовать метод истечения срока действия?
Но это, безусловно, возможно сделать с помощью Django. Вот краткое описание основного подхода:
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 для обслуживания файла, пользователь не может узнать исходное расположение файла.
Вы можете просто использовать что-нибудь простое, например mod_xsendfile . Эта функция также доступна на других популярных веб-серверах, таких как lighttpd или nginx .
Она работает следующим образом: при включении ваше приложение (например, простой PHP-скрипт) может отправлять специальный ответ заголовок, в результате чего веб-сервер будет обслуживать статический файл.
Если вы хотите, чтобы он работал с S3, вам нужно будет обрабатывать каждый запрос таким образом, то есть трафик будет проходить через ваш сайт, оттуда в AWS, обратно в ваш сайт и обратно клиенту. Поддерживает ли S3 символические ссылки / псевдонимы? В таком случае вы можете просто перенаправить действующего пользователя на один из символических URL-адресов и удалить эту символическую ссылку через пару часов.