Существует обычная разница между указателем на константу и указателем на константу. Сделав свой constexpr char*
, вы сами сделали указатель constexpr
(и, конечно, const
), но он все еще пытается указать на неконстантный символ - и это неправильно, так как строковые литералы const
, Решение:
constexpr const char* ch = "StackOverflow!";
, который объявляет указатель constexpr
на const
.
Если Ваше django приложение проксируется nginx, можно использовать x-accell-redirect. Необходимо передать специальный заголовок в ответе, nginx будет intercepet это и начинать служить файлу, можно также передать Довольное Расположение в том же ответе для принуждения загрузки.
То решение хорошо, если Вы хотите управлять, какие пользователи получают доступ к этим файлам.
Можно также использовать конфигурацию как это:
#files which need to be forced downloads
location /static/high_res/ {
root /project_root;
#don't ever send $request_filename in your response, it will expose your dir struct, use a quick regex hack to find just the filename
if ($request_filename ~* ^.*?/([^/]*?)$) {
set $filename $1;
}
#match images
if ($filename ~* ^.*?\.((jpg)|(png)|(gif))$) {
add_header Content-Disposition "attachment; filename=$filename";
}
}
location /static {
root /project_root;
}
Это вызовет загрузку на всех изображениях в некоторой high_res папке (MEDIAROOT/high_rest). И для других статических файлов это будет вести себя как нормальный. Обратите внимание на то, что это - измененный быстрый взлом, который работает на меня. Это может иметь последствия безопасности, так используйте его с предосторожностью.
Я записал простому декоратору для представления django.views.static.serve
Который работает на меня отлично.
def serve_download(view_func):
def _wrapped_view_func(request, *args, **kwargs):
response = view_func(request, *args, **kwargs)
response['Content-Type'] = 'application/octet-stream';
import os.path
response['Content-Disposition'] = 'attachment; filename="%s"' % os.path.basename(kwargs['path'])
return response
return _wrapped_view_func
Также можно играть с nginx типами пантомимы
http://wiki.codemongers.com/NginxHttpCoreModule#types
Это решение не работало на меня, потому что я хотел иметь обе прямых ссылки для файла (таким образом, пользователь может просмотреть изображения, например), и ссылка на загрузку.
Что я делаю, теперь должен использовать другой URL для загрузки, чем для 'представлений' и добавить имя файла как аргумент URL:
обычная ссылка медиа: http://xx.com/media/images/lores/f_123123.jpg
ссылка на загрузку: http://xx.com/downs/hires/f_12323?beach008.jpg
и nginx имеет конфигурацию как это:
location /downs/ {
root /var/www/nginx-attachment;
add_header Content-Disposition 'attachment; filename="$args"';
}
но мне действительно не нравится запах этого.