django从下载hdfs下载文件

20 篇文章 0 订阅
1 篇文章 0 订阅

hdfs下载本地

with client.read('features') as reader:
  features = reader.read()
  f = open('1.jpg', 'wb')
  f.write(features)

通过web下载
文件信息在mysql中有备份,从mysql中得到文件的名字,再从hdfs找到该文件
settings

# hdfs配置
HDFSCLI_TEST_URL = 'http://172.17.0.1:50070' #我是使用docker启动的hdfs
CLIENT = Client(HDFSCLI_TEST_URL, root='/')

view

from django.http import StreamingHttpResponse
from filesystem.settings import CLIENT
class FileDownLoad(View):
    def get(self, request):
    	filesId = request.GET.get('filesId')
		fileIdList = []
    # 转换成列表
    filestemp = eval(filesId)
    # 是一个id
    if type(filestemp) is int:
        fileIdList.append(filestemp)
    else:
        fileIdList = list(filestemp)

    for fileId in fileIdList:
        fileObj = File.objects.filter(id=fileId).first()
        if fileObj is None:
            raise Exception('文件不存在')

        hdfs_name = fileObj.hdfsName
        try:
            with CLIENT.read(hdfs_name) as reader:
                the_file_name = fileObj.name
                # 这里创建返回
                response = StreamingHttpResponse(reader)
                # 注意格式
                response['Content-Type'] = 'image/jpeg'
                # 注意filename 这个是下载后的名字
                response['Content-Disposition'] = 'attachment;filename=%s' % the_file_name
                return response
        except Exception:
            raise Exception(u'下载失败')

用postman测试
在这里插入图片描述

参考
https://hdfscli.readthedocs.io/en/latest/quickstart.html#interactive-shell
https://blog.csdn.net/weixin_42134789/article/details/83346714
https://www.cnblogs.com/zhangshengxiang/p/10873681.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值