我们在一个项目中使用 Android 前端
和 django-rest-framework 后端
。
媒体文件是通过 Django Media files
提供的,我们可以缓存媒体文件并在离线时在应用程序中查看它们。
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'auth/login/', 'rest_framework_jwt.views.obtain_jwt_token',name='jwt_login'), # post username & password to get token
...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
问题是我们需要对媒体文件应用授权,所以我从 url 中删除了 media paths
并添加了一个 View 来完成这项工作
@api_view(['GET'])
def media_image_handler(request,url):
# extra code before serving media
...
...
# read and return media file to response
并且 url.py 更改为:
urlpatterns = patterns('',
url(r'^media/(?P<url>.*)/$',media_image_handler, name='media'),
url(r'^admin/', include(admin.site.urls)),
url(r'auth/login/', 'rest_framework_jwt.views.obtain_jwt_token',name='jwt_login'),
)
现在我们有两个问题:
- 由于额外的代码响应时间变得更长
- 无法离线加载缓存文件
现在问题:
Is there any suitable method that can be used instead? For example instead of full authentication use a random generated file names that cannot be guessed easily or whatever?
我们将不胜感激任何有用的意见
P.S. We are using Retrofit and Picasso on Android
最佳答案
首先:静态文件应该由像 nginx 或 lighttpd 这样的服务器提供服务。关于你的问题。我认为您是在谈论受控下载。该功能调用X-Sendfile,在nginx等服务器中实现。您可以在 Nginx 文档中阅读相关信息。 https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/
关于android - Django 媒体文件和改造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33565774/