Django+Python streaminghttpresponse大文件下载

Django+Python 小白码农bei抓干活之StreamingHttpResponse 大文件下载。

开始写博客的原因

写文章的原因是,本人记性差,还懒。之前做过运维,会把所有问题的解决方案写成文档以便以后翻阅。然而USB丢了,网盘被盗东西全删,让我意识到,还是选一个可以改变的方式改变现状吧。嗯,改变了懒,记忆力没法改变。所以写文章纯属为自己服务的,如果有地方恰巧帮到大家了什么,那是实属因为你们的聪慧,我也为你们高兴。

Urlretrieve的下载弯路

最早用的是urlretrieve的方式来下载,但是urlretrieve分片无法获得相应体,也试过先request获取相应截取信息,但是第一次会因为超时重发一次,这在公司里是不允许的,只好另谋它路。如果urlretrieve有好的解决方式,请大家多多指教,作为小白十分渴望汲取大神的养分。

StreamingHttpResponse

翻阅了大神们的文章后,感觉下载完全就是为了满足需求而定,下载的传输方式,下载服务器的支持方式,下载文件格式,校验,解析等等。所以没有什么是好的,只要满足需求就可以了。因为企业有内部的相应规定,不是所有的方式都允许,需要夹缝中求生存,网上查了很久,最终决定使用HttpResponse。(代码上传我会修改掉公司相内部关的信息)

我接到的需求:
1.支持分片下载。
2.文件 大于1GB。
3.满足企业标准。
4.下载后解压,校验,解析文件。

代码如下:

    def download(id, filename=''):

        csar_dir = (os.path.join(os.getcwd(), 'path' % filename)).encode(
            'unicode-escape').decode('string_escape')

        if not os.path.isfile(path):
            logger.debug("package doesn't exist.")
            url= "%spath%s" % (url, id)

            id = id.encode('unicode-escape').decode('string_escape')

            logger.debug("Downloading file.")

            try:

                urllib2.streamhttpresponse(url, path)

                logger.debug("Downloading package.")


                databasemodel.create(vnfPackageId=id,
                                     fileName=filename,
                                     fileLocalPath=path,
                                     createTime=datetime.datetime.now())


                package_extract = package_extract(id, file, path)
                logger.debug("package extract %s" % package_extract)

                return "download succeed!"

            except Exception as e:
       
                logger.debug(e.message)
                raise Exception("Package %s download fail!" % filename)

        else:
            logging.debug("Package exists.")
            return "Package is exist!"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值