示例#1
0
    def _save(self, name, content):
        '''
        保存文件时使用
        :param name:选择上传的文件名字
        :param content: 包含上传文件内容的File对象
        :return:
        '''
        #创建一个fdfs_client对象
        client = Fdfs_client('./utils/fdfs/client.conf')

        #上传文件到fast_dfs系统中;
        res = client.upload_by_buffer(content.read())
        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # } if success else None
        #如果上传失败提示错误信息
        if res.get('Status') != 'Upload successed.':
            #上传失败
            raise Exception('上传文件到fast dfs失败')
        #获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename
示例#2
0
文件: storage.py 项目: ccMyc/yili
    def _save(self, name, content):
        """保存文件时使用"""
        #name:你选择上传文件的名字
        #content:包含你上传文件内容的file对象 获取文件的内容

        #创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        #上传文件到fast dfs系统中
        res = client.upload_by_buffer(
            content.read())  #upload_by_buffer:根据内容上传文件  返回一个字典
        #res格式
        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }

        if res.get('Status') != 'Upload successed.':
            #上传失败
            raise Exception('上传文件到fast dfs失败')
        #获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename
示例#3
0
    def _save(self, name, content):
        '''保存文件时使用 上传到fast_fds'''
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fast_dfs系统中
        res = client.upload_by_buffer(content.read())
        # 返回的是这种格式的字典dict {
        # 'Group name'      : group_name,
        # 'Remote file_id'  : remote_file_id,
        # 'Status'          : 'Upload successed.',
        # 'Local file name' : '',
        # 'Uploaded size'   : upload_size,
        # 'Storage IP'      : storage_ip
        # }

        # 判断是否上传成功
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast_dfs失败')
        
        # 获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename
示例#4
0
    def _save(self, name, content):
        """保存文件时使用"""
        # name: 上传文件的名字
        # content: 包含需要上传文件的File类的一个对象

        # 创建一个Fdfs_client对象, 程序通过client.conf文件去找FastDFS的tracker server
        client = Fdfs_client(self.client_conf)
        # linux中pip install py3Fdfs 后, 网上说使用这种方式创建Fdfs_client对象
        # tracker_path = get_tracker_conf(self.client_conf)
        # client = Fdfs_client(tracker_path)

        # 上传文件到FastDFS系统中
        res = client.upload_by_buffer(content.read())
        # res
        # {
        #     'Group name'      : group_name,
        #     'Remote file_id'  : remote_file_id,
        #     'Status'          : 'Upload successed.',
        #     'Local file name' : '',
        #     'Uploaded size'   : upload_size,
        #     'Storage IP'      : storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到FastDFS失败')

        # 获取返回的文件id
        filename = res.get('Remote file_id')

        return filename
    def image(self, request):
        """
            保存图片
        :param request:
        :return:
        """
        # 1、获取图片数据
        data = request.FILES.get('image')
        # 验证图片数据
        if data is None:
            return Response(status=500)

        # 2、建立fastDFS连接对象
        client = Fdfs_client(settings.FASTDFS_CONF)

        # 3、上传图片
        res = client.upload_by_buffer(data.read())

        # 4、判断上传状态
        if res['Status'] != 'Upload successed.':
            return Response({'error': '上传失败'}, status=501)

        # 5、获取上传的图片路径
        image_url = res['Remote file_id']

        # 6、结果返回
        return Response({'img_url': settings.FDFS_URL + image_url}, status=201)
示例#6
0
    def _save(self, name, content):
        """保存文件时使用
        # name: 保存文件名字
        # content: 包含上  传文件内容的File对象"""
        client = Fdfs_client(self.client_conf)

        # 上传文件到fastdfs系统中
        res = client.upload_by_buffer(content.read())

        # res 返回 dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': local_file_name,
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            raise Exception('上传文件到FastDFS失败')

        # 获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename
示例#7
0
    def _save(self, name, content):
        '''保存文件时使用'''
        # name:你选择上传文件的名字
        # content:包含上传文件时的File对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到Fast  dfs系统中
        res = client.upload_by_buffer(content.read())

        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }

        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('文件上传失败')

        # 在image表中保存/group1/...  内容,返回的Remote file_id是这部分类容
        # 获取返回的文件id
        filename = res.get('Remote file_id')

        return filename
示例#8
0
 def save(self, name, content, max_length=None):
     # content:请求报文中的文件对象
     client = Fdfs_client(settings.FDFS_CLIENT_CONF)
     ret = client.upload_by_buffer(content.read())
     if ret['Status'] != 'Upload successed.':
         raise Exception('文件保存失败')
     return ret['Remote file_id']
示例#9
0
    def _save(self, name, content):
        '''保存文件时使用'''
        # name:你选择上传文件的名字 test.jpg
        # content:包含你上传文件内容的File对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fast dfs系统中
        res = client.upload_by_buffer(content.read())

        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败 抛出异常是为了让本包的可用性,作为一个工具包,放在其他项目里面,失败应该抛出异常让调用者去捕获,再决定处理的逻辑
            raise Exception('上传文件到fast dfs失败')

        # 获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename
示例#10
0
    def _save(self, name, content):
        '''保存文件时使用'''
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)
        ext_file = name.split('.')[-1]
        # 上传文件到fast dfs系统中
        res = client.upload_by_buffer(content.read(),file_ext_name=ext_file)

        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast dfs失败')

        # 获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename
示例#11
0
    def _save(self, name, content):
        '''保存文件时使用'''
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象

        # 创建一个对象
        tracker = get_tracker_conf(self.client_conf)
        client = Fdfs_client(tracker)
        # print('->>>', client)
        # 上传到fast dfs系统中
        res = client.upload_by_buffer(content.read())

        # @return dict {
        #             'Group name'      : group_name,
        #             'Remote file_id'  : remote_file_id,
        #             'Status'          : 'Upload successed.',
        #             'Local file name' : local_file_name,
        #             'Uploaded size'   : upload_size,
        #             'Storage IP'      : storage_ip
        #         } if success else None
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到FastDFS失败')
        print(res)
        # 获取返回的文件id
        filename = res.get('Remote file_id')
        return filename.decode()
示例#12
0
    def _save(self,name,content):
        """
        被Storage.save()调用,保存文件时就会调用
        Django会将该方法的返回值保存到数据库中对应的文件字段,
        也就是说该方法应该返回要保存在数据库中的文件名称信息
        :param name: 要保存的文件名
        :param content: 要保存的文件对象
        :return: file_id 把上传后的文件路径返回
        """
        # 1.创建client

        # 固定文件路径形式
        # client = Fdfs_client('dpy_meiduo_mall/utils/fastdfs/client.conf')
        # 使用配置信息形式
        # client = Fdfs_client(settings.FDFS_CLIENT_CONF)

        # 可在无参数时实例化对象
        client = Fdfs_client(self.client_conf)

        # 2.上传文件到fastdfs

        # 绝对路径方式,此方法上传的图片,在storage中有文件后缀
        # ret = client.upload_by_filename('文件的绝对路径")

        # 把要上传的文件以二进制形式进行上传,没有后缀
        ret = client.upload_by_buffer(content.read())

        # 3.判断上传是否成功
        if ret.get('Status') != 'Upload successed.':
            raise Exception('Upload file failed')

        # 4.文件上传成功
        return ret.get('Remote file_id')
示例#13
0
    def _save(self, name, content):
        """保存文件时调用"""
        # name: 选择上传文件的名称
        # content: 是一个File类的实例对象,包含上传文件的内容

        # 创建Fdfs_client类的对象
        client = Fdfs_client(self.client_conf)

        # 获取上传文件的内容
        content = content.read()

        # 上传文件到FDFS文件存储服务器
        # upload_by_buffer:根据文件的内容将文件上传到FDFS系统
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id, # 文件ID
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # } if success else None

        response = client.upload_by_buffer(content)

        if response is None or response.get('Status') != 'Upload successed.':
            # 上传失败,抛出异常
            raise Exception("上传文件到FDFS系统失败")

        # 获取文件ID
        file_id = response.get('Remote file_id')

        # 返回文件ID
        return file_id
示例#14
0
    def _save(self, name, content):
        """
        保存文件时使用
        :param name: 上传文件的名字
        :param content: 包含上传文件内容的File对象
        """
        client = Fdfs_client(self.client_conf)

        # 上传文件到fastdfs系统
        res = client.upload_by_buffer(content.read())

        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fastdfs失败')

        # 获取返回的文件id
        filename = res.get('Remote file_id')
        return filename
示例#15
0
    def _save(self, name, content):
        # name是图片的原始名字,content是传过来的图片对象

        # 生成fdfs对象,用来访问fdfs服务器
        client = Fdfs_client(self.client_conf)
        # 读取图片文件
        file_data = content.read()
        # 上传图片到fastdfs
        try:
            # 上传图片需要访问fdfs服务,是远程链接,也有可能出现异常
            ret = client.upload_by_buffer(file_data)
        except Exception as e:
            print(e)
            raise
        """ ret返回下面这种类型的值
        {
            'Group name': 'group1',
            'Status': 'Upload successed.',  # 注意这有一个点
            'Remote file_id': 'group1/M00/00/00/wKjzh0_xaR63RExnAAAaDqbNk5E1398.py',
            'Uploaded size': '6.0KB',
            'Local file name': 'test',
            'Storage IP': '192.168.243.133'
        }
        """
        # 判断是否上传成功,获取文件的存放的真是路径和名字
        if ret.get('Status') == 'Upload successed.':
            file_id = ret.get('Remote file_id')
            return file_id
        else:
            # 抛出异常
            raise Exception('上传图片到fdfs失败')
示例#16
0
    def _save(self, name, content):
        """
        当用户通过django管理后台上传文件时,
        django会调用此方法来保存用户上传的文件,
        我们可以重写此方法, 把文件上传到FastDFS服务器
        :param name:
        :param content: 内容 字节类型
        :return: 返回一个path给数据库
        默认返回:return super()._save(name, content)
        """
        # 连接fdfs
        client = Fdfs_client('utils/fdfs/client.conf')
        print(111)
        try:
            # 获取内容
            datas = content.read()
            # 保存图片 返回一个json
            result = client.upload_by_buffer(datas)
            status = result.get('Status')
            # 判断返回json中的status是否为success
            if 'Upload successed.' != status:
                raise Exception('上传文件到FaseDFS失败,status为{}'.format(status))
            path = result.get('Remote file_id')
        except Exception as e:
            print(e)
            raise e

        return path
示例#17
0
    def create(self, validated_data):

        image = validated_data.get('logo')
        name = validated_data.get('name')
        first_letter = validated_data.get('first_letter')

        from fdfs_client.client import Fdfs_client
        # 创建fastdfs连接对象
        client = Fdfs_client('meiduo_mall/utils/fastdfs/client.conf')

        result = client.upload_by_buffer(image.read())

        if result['Status'] == 'Upload successed.':
            # 获取上传后的路径
            image_url = result.get('Remote file_id')

            # windows系统需要用此方法修改image_url,将group1\\M00/00/02/...改为group1/M00/00/02/...
            image_url = image_url.replace('\\', '/')

            # 保存图片
            brand = Brand.objects.create(name=name, logo=image_url, first_letter=first_letter)

            return brand
        else:
            raise serializers.ValidationError('上传失败')
示例#18
0
    def _save(self, name, content):
        '''
        :param name:你选择的上传文件的名字
        :param content:File类的对象,包含你上传的文件内容,有了这个对象就可以获取文件内容
        :return:
        '''
        # 创建一个fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fastdfs系统中
        # upload_by_buffer()方法是根据文件内容上传文件,回值格式为:
        #dict {
        #     'Group name'      : group_name,
        #     'Remote file_id'  : remote_file_id,
        #     'Status'          : 'Upload successed.',
        #     'Local file name' : '',
        #     'Uploaded size'   : upload_size,
        #     'Storage IP'      : storage_ip
        #     }
        res = client.upload_by_buffer(content.read())
        print(res)

        #判断是否上传成功
        if res.get('Status') != 'Upload successed.':
            #上传失败
            raise Exception('上传文件到fastdfs失败')

        #获取返回的文件id
        filename = res.get('Remote file_id')
        return filename
示例#19
0
    def update(self, instance, validated_data):

        image = validated_data.get('logo')
        name = validated_data.get('name')
        first_letter = validated_data.get('first_letter')

        from fdfs_client.client import Fdfs_client
        client = Fdfs_client('meiduo_mall/utils/fastdfs/client.conf')
        result = client.upload_by_buffer(image.read())

        if result['Status'] == 'Upload successed.':
            image_url = result.get('Remote file_id')

            # windows系统需要用此方法修改image_url,将group1\\M00/00/02/...改为group1/M00/00/02/...
            image_url = image_url.replace('\\', '/')

            instance.logo = image_url
            instance.name = name
            instance.first_letter = first_letter

            instance.save()

            return instance
        else:
            raise serializers.ValidationError('更新失败')
示例#20
0
    def _save(self, name, content):
        """用于保存文件"""
        # 创建一个fdfs client连接对象
        client = Fdfs_client(self.base_conf)

        # content 返回一个file对象
        file_content = content.read()

        # 根据文件内容上传文件
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        res = client.upload_by_buffer(file_content)

        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fdfs失败')

        # 获取返回的文件id
        filename = res.get('Remote file_id')

        return filename
示例#21
0
    def _save(self, name, content):
        """保存文件时使用"""
        # name:你选择的上传文件的名字
        # content:包含你上传文件内容的file对象
        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fast dfs系统中
        res = client.upload_by_buffer(content.read())

        # 获取上传状态
        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        #  }
        # print(res.get('Status'))

        if res.get('Status') != 'Upload successed.':
            raise Exception('上传文件失败')

        # # 获取上传文件成功后的id名
        res_id = res.get('Remote file_id')

        return res_id
示例#22
0
    def _save(self, name, content):
        '''保存文件时使用'''
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fast dfs系统中
        res = client.upload_by_buffer(content.read())

        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast dfs失败')

        # 获取返回的文件ID
        filename = res.get('Remote file_id')

        filename = filename.decode(
            "utf-8"
        )  # 需要加上这一句,不然虽然可以存储到fastdfs,但无法存储到Django中的mysql,原因是返回值为b"string",需要转变成string

        return filename
示例#23
0
    def _save(self, name, content):
        #保存文件使用,name:选择的上传文件的名字
        #content:包含你上传文件内容的File对象

        #创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)
        #上传文件到系统中
        res = client.upload_by_buffer(content.read())

        # Ctrl+鼠标左击,可点击Fdfs_client去底层看返回值
        # @ return dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': local_file_name,
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # } if success else None

        if res.get('Status') != 'Upload successed.':
            #上传失败
            raise Exception("上传文件到FastDFS失败")
        #获取返回的文件ID
        filename = res.get('Remote file_id')
        return filename
示例#24
0
    def _save(self, name, content):
        """
        保存文件
        :param name: 选择上传文件的文件名
        :param content: 包含上传文件内容的File对象
        :return: 上传文件后fast dfs 文件存储系统返回的文件ID
        """
        # 1. 创建 Fdfs_client对象
        # client = Fdfs_client('./utils/fdfs/client.conf')
        client = Fdfs_client(self.client_conf)

        # 2. 通过文件内容上传文件
        res = client.upload_by_buffer(content.read())

        # client.upload_by_buffer()方法返回内容
        # return dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # } if success else None

        # 3. 判断上传是否成功,若上传失败抛出异常
        if res.get('Status') != 'Upload successed.':
            raise Exception('文件上传到 fast dfs 失败!')

        # 4. 上传成功获取返回的ID,并作为函数的返回值
        filename = res.get('Remote file_id')

        return filename
示例#25
0
    def _save(self, name, content):
        """上传的时候会被调用的方法"""
        # name: test.jpg
        # content: 图片内容的file对象

        # 创建一个fastfds对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fast dfs系统中
        res = client.upload_by_buffer(content.read())

        # 返回一个dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败,抛出异常
            raise Exception('上传文件到fast dfs失败')

        # 获取返回的文件ID,注意id并不是文件名,没带jpg的格式
        filename = res.get('Remote file_id')

        return filename
示例#26
0
    def save(self, name, content, max_length=None):
        client = Fdfs_client(self.client_conf)
        ret = client.upload_by_buffer(content.read())

        if ret['Status'] != 'Upload successed.':
            raise Exception("文件上传失败")
        return ret['Remote file_id']
示例#27
0
    def _save(self, name, content):
        '''保存文件时使用'''
        # name :你选择上传文件的名字
        # content: 包含你上传文件内容的File类的对象

        # 创建一个Fdfs_client的对象,括号内就是这个客户端的配置文件
        client = Fdfs_client(self.client_conf)

        # 上传文件到fastdfs 文件存储系统中,并返回一个字典
        res = client.upload_by_buffer(content.read())

        # @return dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # } if success else None

        # 判断上传的状态
        if res.get('Status') != 'Upload successed.':
            # 如果上传失败那么就抛出一个异常
            raise Exception('上传文件失败')

        # 上传成功,获取file_id
        file_id = res.get('Remote file_id')

        # 返回file_id
        return file_id
示例#28
0
    def _save(self, name, content):
        """保存文件时调用"""
        # name: 上传文件的名称 a.txt
        # content: File类的对象,包含了上传文件的内容

        # 上传文件到FDFS文件存储系统
        # client = Fdfs_client('客户配置文件路径')
        # client = Fdfs_client(os.path.join(settings.BASE_DIR, 'utils/fdfs/client.conf'))
        client = Fdfs_client(self.client_conf)

        # 获取上传文件内容
        file_content = content.read()

        # 上传文件
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id, # 保存的文件id
        #     'Status': 'Upload successed.', # 上传是否成功
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # } if success else None

        response = client.upload_by_buffer(file_content)

        if response is None or response.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast dfs系统失败')

        # 获取保存文件id
        file_id = response.get('Remote file_id')

        # 返回file_id
        return file_id
示例#29
0
    def _save(self, name, content):
        """保存文件的时候使用"""
        # name :上传文件的名称
        # content: 包含上传文件内容的File对象
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        # 上传文件到fdfs系统中
        client = Fdfs_client(self.client_conf)
        # 获取上传文件的内容
        content = content.read()
        # 调用upload_by_buffer()
        res = client.upload_by_buffer(content)
        # 判断是否上传成功
        if res['Status'] != 'Upload successed.':
            raise Exception('上传文件到fdfs失败')


        # 获取文件的id
        file_id= res['Remote file_id']

        # 返回文件的id

        return file_id
示例#30
0
    def _save(self, name, content):
        '''保存文件时使用'''
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象

        # 创建一个Fdfs_client对象
        tracker_path = get_tracker_conf(self.client_conf)
        client = Fdfs_client(tracker_path)

        # 上传文件到fast dfs系统中
        res = client.upload_by_buffer(content.read())

        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }

        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast dfs失败')

        # 获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename.decode("utf-8")
示例#31
0
    def update(self, instance, validated_data):
        # 1、获取前端brand对象
        brand = validated_data.get('name')
        first_letter = validated_data.get('first_letter')
        # 2、获取前端传递的图片数据
        logo = validated_data['logo']
        # 3、链接fasfDFS
        client = Fdfs_client(
            '/home/python/Desktop/Git_meiduo/meiduo_mall/utils/fastdfs/client.conf'
        )
        # 4、上传图片
        res = client.upload_by_buffer(logo.read())
        # 5、判断是否成功
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('上传失败')
        # 6、提取图片链接地址
        path = res.get('Remote file_id')

        # 7、保存图片表
        instance.logo = path

        # 更新图片
        instance.save()
        # 生成静态化页面
        # get_detail_html(sku.id)

        # 异步处理调用
        # get_detail_html.delay(name)
        return instance
    def save(self, name, content, max_length=None):
        '''重写上传文件的函数'''
        # 我们需要将文件上传到 FastDFS 上面.
        # 创建客户端对象:
        client = Fdfs_client(settings.FDFS_CLIENT_CONF)

        # 调用上传函数, 进行上传:
        # 我们这里调用的是上面说过的, 根据文件内容上传方法.
        result = client.upload_by_buffer(content.read())

        # 判断是否上传成功:
        if result.get('Status') != 'Upload successed.':
            raise Exception('上传文件到FDFS系统失败')

        # 上传成功: 返回 file_id:
        file_id = result.get('Remote file_id')

        # 这个位置返回以后, django 自动会给我们保存到表字段里.
        return file_id
示例#33
0
    def _save(self, name, content):
        """保存 context是用户上传过来的文件对象"""
        # 从文件对象中读取文件数据
        file_data = content.read()
        # 创建用户存储fastdfs的客户端
        client = Fdfs_client(self.client_conf)
        # 上传文件内容到fastdfs中
        try:
            ret = client.upload_by_buffer(file_data)
            # ret的返回值格式 {'Group name':'group1','Status':'Upload successed.', 'Remote file_id':'group1/M00/00/00/
            # wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploaded size':'6.0KB','Local file name':'test'
            # , 'Storage IP':'192.168.243.133'}
        except Exception as e:
            print(e)
            raise

        if ret.get("Status") == "Upload successed.":
            # 表示上传成功
            file_id = ret.get("Remote file_id")
            # 返回file_id, 也就是文件名,django会保存到数据库中
            return file_id
        else:
            raise Exception("上传到FastDFS失败")
示例#34
0
class FilesrvHandler(object):
    def __init__(self):
        self.secret_code = "sW$^dffGad3e3h8fh7gc~t7 `7 t"
        self.root = "/data0/androidapk/"
        self.client = Fdfs_client('/etc/fdfs/client.conf')

    def test(self, words):
        return words

    def save(self, fileobj, meta):
        try:
            result = {}
            hexs = sha1(meta.appid)
            #hexs.update(str(meta.version_code))
            hexs.update(self.secret_code)
            hexs.update(str(meta.seq))
            hex_code = hexs.hexdigest()
            dirs = os.path.join(meta.file_type, *[hex_code[(i-1)*2:i*2] for i in range(1, 5)])

            filename = "{}.{}".format(hex_code[8:], meta.ext)
            filepath = os.path.join(dirs, filename)
            fullpath = os.path.join(self.root, filepath)
            try:
                os.makedirs(os.path.join(self.root, dirs))
            except:
                pass
            with open(fullpath, 'w') as f:
                f.write(fileobj)

            result["md5"] = md5(fileobj).hexdigest()
            result["path"] = filepath
        except Exception as e:
            result = {"error": str(e)}

        return json.dumps(result)

    def save2fdfs(self, filebuff, meta):
        meta_dict = {
            "appid": meta.appid,
            "version_code": meta.version_code,
            "version_name": meta.version_name,
            "file_type": meta.file_type,
            "ext": meta.ext,
            "seq": meta.seq
        }
        rs = self.client.upload_by_buffer(filebuff, meta.ext, meta_dict=meta_dict)
        result = {
            "md5": md5(filebuff).hexdigest(),
            "path": rs["Remote file_id"],
            "size": rs["Uploaded size"]
        }

        return json.dumps(result)

    def save_media2fdfs(self, filebuff, ext):
        rs = self.client.upload_by_buffer(filebuff, ext)
        result = {
            "md5": md5(filebuff).hexdigest(),
            "path": rs["Remote file_id"],
            "size": rs["Uploaded size"]
        }

        return json.dumps(result)

    def get(self, fileid):
        try:
            meta = self.client.get_meta_data(fileid)
            return Meta(
                appid=meta['appid'],
                version_code=int(meta['version_code']),
                version_name=meta['version_name'],
                file_type=meta['file_type'],
                ext=meta['ext'],
                seq=int(meta['seq'])
            )
        except Exception as e:
            return str(e)

    def remove(self, fileid):
        os.remove(os.path.join(self.root, fileid))
        return json.dumps({'appid': fileid})