Skip to main content
 首页 » 编程设计

android之Django 媒体文件和改造

2025年05月04日31虾米姐

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

现在我们有两个问题:

  1. 由于额外的代码响应时间变得更长
  2. 无法离线加载缓存文件

现在问题:

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/