本文共 2734 字,大约阅读时间需要 9 分钟。
我是基于django的rest接口插件提供的下载文件接口,除了需要安装django之外还需要安装djangorestframework库
不多说,下面直接贴代码
#views.pyfrom rest_framework.permissions import AllowAnyfrom rest_framework.views import APIViewfrom django.http import StreamingHttpResponseclass DonwloadView(APIView): permission_classes = (AllowAny,) def get(self, request, format=None): def file_iterator(fn, chunk_size=512): while True: c = fn.read(chunk_size) if c: yield c else: break fn = open('test.zip', 'rb') response = StreamingHttpResponse(file_iterator(fn)) response['Content-Type'] = 'application/octet-stream' response['Content-Disposition'] = 'attachment;filename="test.zip"' return response
# urls.pyfrom django.conf.urls import urlfrom rest_framework.urlpatterns import format_suffix_patternsfrom . import viewsurlpatterns = [ url(r'^download/$', views.DonwloadView.as_view(), name='download'),]urlpatterns = format_suffix_patterns(urlpatterns)
这样子,一个基于django的大文件下载接口就提供完成,我这边是另一个系统使用的是tornado框架,所以下面是使用tornado框架自带的一些库来下载文件。
这里使用的是django的StreamingHttpResponse,所以读文件的时候一定要使用’rb’,否则对于一些二进制文件可能会有问题(我这里没有测试)
使用tornado的库下载大文件时遇到很多问题,我先将代码贴出来,然后根据代码再将我遇到的问题贴出来分享一下,大家使用时别再走入误区,也知道问题原因。
from tornado import httputil, httpclientfn = open("test.zip", 'ab')def _streaming_callback(data): fn.write(data)http_client = httpclient.HTTPClient(max_body_size=107374182400)request = httpclient.HTTPRequest(download_url, streaming_callback=_streaming_callback, connect_timeout=172800.0, request_timeout=172800.0)http_client.fetch(request)
转载地址:http://dbbqj.baihongyu.com/