我们在一个项目中使用 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/
