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

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

        # 上传文件-》fdfs
        res = client.upload_appender_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('文件上传失败')
        # 获取返回的文件ID
        filename = res.get('Remote file_id')
        return filename
示例#2
0
    def save(self, name, content, max_length=None):
        """保存文件时使用"""
        #name 你选择上传文件的名字
        #content 包含你上传文件内容的file对象

        #创建一个fdfs_client对象
        client = Fdfs_client(
            '/home/scb/Desktop/dailyfresh/daily_fresh/utils/fdfs/client.conf')

        #上传文件到fast_dfs系统中
        res = client.upload_appender_by_buffer(content.read())
        """ 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 success else None
        """
        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):
        """保存文件时使用"""
        # name:上传文件的名字
        # content:包含上传文件内容的file对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client("./utils/fdfs/client.conf")

        res = client.upload_appender_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('上传文件到fastdfs失败')

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

        return filename
示例#4
0
    def _save(self, name, content):
        """存储文件时使用"""
        # name :上传文件名
        # content: 包含上传文件内容的File对象-----读取文件内容

        # 创建一个Fast dfs 对象
        client = Fdfs_client('./utils/fdfs/client.conf')

        # 上传文件到Fast dfs系统中
        res = client.upload_appender_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 res.get('Status') != 'Upload successed.':
            # 上传失败,抛出异常
            raise Exception('上传文件到fast dfs 失败')

        # 获取fast dfs存储的文件名
        filename = res.get('Remote file_id')

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

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

        # 上传文件到FastDFS系统中
        res = client.upload_appender_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
示例#6
0
    def _save(self, name, content):
        """
        当管理员在后台上传文件时,会使用此类保存上传的文件
        :param name:
        :param content: 返回一个
        :return:
        """

        # 默认保存在此路径下
        # path = super().save(name, content)
        # print(name, path, type(content))

        # todo: 保存到FastDfs服务器上
        client = Fdfs_client('utils/fdfs/client.conf')
        try:
            # 上传文件到服务器, 二进制
            datas = content.read()
            # 上传成功返回json字符串
            result = client.upload_appender_by_buffer(datas)
            status = result.get('Status')
            if status == 'Upload successed.':
                # 上传成功
                path = result.get('Remote file_id')
            else:
                raise Exception('上传图片失败:%s' % status)
        except Exception as e:
            print(e)
        return path
示例#7
0
    def _save(self, name, content):
        """保存文件时使用
        name: 你选择上传文件的名字
        content: 包含你上传文件内容的File对象
        """
        # 这里的路径是相对于根目录而言,如果不是,程序运行会报错
        client = Fdfs_client(self.client_conf)

        # upload_appender_by_buffer()根据文件缓存来存取文件
        res = client.upload_appender_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 res.get('Status') != 'Upload successed.':
            raise Exception('文件上传到fast dfs失败')

        # 要将filename从bytes转换为str
        filename = res.get('Remote file_id').decode()
        return filename
示例#8
0
    def _save(self, name, content):
        """保存文件时使用"""
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象

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

        # 上传文件到fast dfs系统
        # 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
        res = client.upload_appender_by_buffer(content.read())

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

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

        return filename
示例#9
0
    def _save(self,name,content,max_length=None):

        # 1.创建客户端的实例对象
        from fdfs_client.client import Fdfs_client
        client = Fdfs_client(self.conf_path)
        # 2.上传图片, read的读取的资源是二进制
        data = content.read()
        # upload_by_buffer 上传二进制
        # upload_by_buffer 会返回上传结果
        result = client.upload_appender_by_buffer(data)
        """
        {'Status': 'Upload successed.',
        'Uploaded size': '333.00KB',
        'Local file name': '/home/python/Pictures/snow.jpg',
        'Storage IP': '192.168.144.132',
        'Status': 'Upload successed.',
        'Group name': 'group1',
        'Remote file_id': 'group1/M00/00/00/wKiQglvrjeeAY2LvAAU3v5e9Wi8265.jpg'}
        """
        # 3.判断上传结果,获取file_id
        if result.get('Status') == 'Upload successed.':
            file_id = result.get('Remote file_id')
            return file_id
        else:
            raise Exception('上传失败')
示例#10
0
class MyspiderPipeline(ImagesPipeline):
    def open_spider(self, spider):
        self.spiderinfo = self.SpiderInfo(spider)
        self.client = Fdfs_client(spider.settings.get('FDSF_CONF'))
        self.nginx = spider.settings.get("FDSF_NGINX")

    def get_media_requests(self, item, info):
        for urls in item['image_urls']:
            urls = urls.replace('http://mm.howkuai.com/',
                                'https://www.meizitu.com/')
            yield scrapy.Request(urls)

    def item_completed(self, results, item, info):
        # 将下载的图片路径(传入到results中)存储到 image_paths 项目组中,如果其中没有图片,我们将丢弃项目:
        paths = [x['checksum'] for ok, x in results if ok]
        if not paths:
            raise DropItem("Item contains no images")
        item['image_path'] = paths
        return item

    def image_downloaded(self, response, request, info):
        checksum = None
        for path, image, buf in self.get_images(response, request, info):
            res = self.client.upload_appender_by_buffer(buf.getvalue(), 'jpg')
            if res["Status"] == 'Upload successed.':
                checksum = res.get("Remote file_id")
        return self.nginx + checksum
示例#11
0
    def _save(self, name, content, max_length=None):

        # 1.创建 fdfs_client 客户端,加载 FDFS的配置信息
        # client = Fdfs_client('utils/fastdfs/client.conf')
        # client = Fdfs_client(settings.FDFS_CLIENT_CONF)
        client = Fdfs_client(self.path)

        # 2.获取图片内容并上传
        # 注意点:content是图片二进制内容
        file_data = content.read()
        # buffer 上传二进制
        result = client.upload_appender_by_buffer((file_data))
        """
        {'Group name': 'group1',
        'Remote file_id': 'group1/M00/00/00/wKiOllvGHF6AS5ckAADIlkvVtHw058.jpg',
        'Status': 'Upload successed.',
        'Local file name': '/home/python/Desktop/images/timg.jpg',
        'Uploaded size': '50.00KB',
        'Storage IP': '192.168.142.150'}

        """
        # 3.判断返回结果 返回 图片路径
        if result.get('Status') == 'Upload successed.':
            # 返回上传的字符串
            return result.get('Remote file_id')
        else:
            raise Exception('上传失败')
示例#12
0
 def _save(self, name, content):
     '''保存文件时使用'''
     # name:选择上传文件的名字
     # content:包含上传文件内容的File对象
     # python与fastdfs交互
     # 创建一个Fdfs_client对象
     client = Fdfs_client(self.client_conf)
     # 使用upload_appender_by_buffer方法上传文件内容,content.read()直接读取文件内容
     # 该方法返回值类型为字典
     res = client.upload_appender_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('上传失败')
     # 返回文件ID
     filename = res.get('Remote file_id')
     # 返回的Remote file_id存储在数据表的image字段中
     return filename
示例#13
0
    def post(self, request):
        # try:
        #     avatar = request.body
        # except:
        #     return http.JsonResponse({'code': 4002, 'errmsg': '数据不存在'})
        user = request.user
        # 3创建FastDFS链接对象
        client = Fdfs_client(settings.FASTDFS_PATH)
        # 获取前端传递的image文件
        image = request.FILES.get('avatar')
        # 上传图片到fastDFS
        print(image)
        res = client.upload_appender_by_buffer(image.read())
        # 判断是否上传成功
        if res['Status'] != 'Upload successed.':
            return http.JsonResponse({'code': 4302, 'errmsg': '文件读写错误'})
        # 获取上传后的路径
        image_url = res['Remote file_id']

        # 保存图片
        User.objects.filter(id=user.id).update(avatar=image_url)
        # User.objects.create(avatar=avatar, url=image_url)

        data = {'avatar_url': Url(image_url)}
        return http.JsonResponse({'code': 0, 'errmsg': '头像上传成功', 'data': data})
示例#14
0
    def _save(self, name, content, client_conf=None, base_url=None):
        '''保存文件时使用'''
        # name:你选择上传文件的名字
        # content:包含你上传文件内容的File对象

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

        # 上传文件到fast dfs系统中
        res = client.upload_appender_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('上传文件到fast dfs失败!')

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

        return filename
示例#15
0
    def save(self, name, content):
        """保存文件时使用"""
        # name: 选择上传的文件名字
        # content: 包含上传文件内容的Field对象

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

        # 上传文件到fast dfs系统中
        res = client.upload_appender_by_buffer(content.read())  # bytes类型
        """
         @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('上传fast dfs系统失败')

        # 获取file_id,并返回
        filename = res.get("Remote file_id")

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

        # 创建一个Fdfs client对象,指定一个client文件
        client = Fdfs_client('utils/fdfs/client.conf')

        # 上传文件到fast dfs系统中
        res = client.upload_appender_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('上传文件失败')
        # 获取返回的文件的id
        filename = res.get('Remote file_id')
        return filename
示例#17
0
    def _save(self, name, content):
        """
        在fastDFS中保存文件
        :param name: 传入的文件名
        :param content: 文件内容
        :return: 保存到数据库中的FastDFS的文件名
        """
        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fast dfs系统中
        res = client.upload_appender_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 res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到Fast DFS 失败!')

        # 获取返回的文件id
        filename = res.get('Remote file_id')
        return filename
示例#18
0
    def _save(self, name, content):
        '''
        文件上传
        :param name:  上传文件名称
        :param content:  上传文件内容 File 对象自身
        :return: 上传成功文件名
        '''
        # 实例化对象
        trackers = get_tracker_conf(self.fdfs_conf)
        client = Fdfs_client(trackers)
        # 使用上传内容方法
        res = client.upload_appender_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 res.get('Status') != 'Upload successed.':
            # 谁调用谁出来异常
            raise Exception('文件上传失败!')
        name = res.get('Remote file_id')
        # 不编码会报错
        return name.decode()
示例#19
0
 async def save_image_to_fdfs(self, pic_str):
     # 把图片存储到fastdfs文件系统中
     client = Fdfs_client(settings.FDFS_CLIENT_CONF)
     ret = client.upload_appender_by_buffer(b64decode(pic_str))
     if ret.get("Status") != "Upload successed.":
         raise Exception("upload file failed")
     file_name = ret.get("Remote file_id")
     return settings.FDFS_URL + file_name
示例#20
0
 def _save(self, name, content):
     client = Fdfs_client(self.client_conf)
     res = client.upload_appender_by_buffer(content.read())
     if res.get('Status') != 'Upload successed':
         # 上传失败
         raise Exception('upload file to fastdfs failed')
     # 获取返回的文件ID
     filename = res.get('Remote file_id')
     return filename
示例#21
0
 def redisControl(self, frame):
     test = Fdfs_client(get_tracker_conf('./client.conf'))
     real, buff = cv2.imencode('.jpg', frame)
     ret_upload = test.upload_appender_by_buffer(buff.tobytes(), 'jpg')
     self.redis.hset(
         "PresetPosition", '"{}:{}"'.format(self.plan_id, self.number),
         '"{}"'.format(ret_upload.get("Remote file_id").decode()))
     log.info("采集编号:[{}]-采集过程id:[{}]-拍照成功".format(self.plan_id,
                                                  self.number))
示例#22
0
    def _save(self, name, content):
        client = Fdfs_client(self.client_conf)
        res = client.upload_appender_by_buffer(content.read())

        if res.get('Status') != 'Upload successed.':

            raise Exception('上传文件失败')

        filename = res.get('Remote file_id')
        return filename
示例#23
0
class FdfsClient:
    client = None

    def __init__(self):
        if self.client is None:
            self.client = Fdfs_client(os.path.join(BASE_DIR, 'utils/fdfs/client.conf'))

    # 上传文件buffer
    def upload_buffer(self, buffer, ext_name=None):
        result = self.client.upload_appender_by_buffer(buffer, ext_name)
        return {'file_id': result.get('Remote file_id').decode()}
示例#24
0
    def _save(self, name, content):
        '''上传到fdfs'''
        client_conf_obj = get_tracker_conf(self.client_conf)
        client = Fdfs_client(client_conf_obj)

        ret = client.upload_appender_by_buffer(content.read())

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

        return ret.get('Remote file_id')
示例#25
0
    def _save(self, name, content):
        '''保存文件'''
        #创建Fdfs_client 对象
        client = Fdfs_client(conf_path='./utils/fdfs/client.conf')
        res = client.upload_appender_by_buffer(content.read())
        # print(res.get('Status'))
        if res.get('Status') != 'Upload successed.':
            raise Exception('上传文件到FAST dfs失败')

        filename = res.get('Remote file_id')
        return filename
示例#26
0
def fastDFSStorage(name, content):
    """自定义上传文件"""
    tracker_path = get_tracker_conf('./utils/fdfs/client.conf')
    client = Fdfs_client(tracker_path)
    res = client.upload_appender_by_buffer(content.read())
    if res.get('Status') != 'Upload successed.':
        # 上传失败
        raise Exception('上传文件到fast dfs失败')
    # 获取返回的文件ID
    filename = res.get('Remote file_id')
    return filename.decode()
示例#27
0
    def _save(self, name, content, max_length=None):
        # 功能:保存文件 —— 项目二实现
        #提取文件数据
        data = content.read()

        conn = Fdfs_client(settings.FDFS_PATH)
        res = conn.upload_appender_by_buffer(data)

        if res['Status'] != 'Upload successed.':
            raise ValidationError('fdfs上传失败')
        file_id = res['Remote file_id']

        return file_id
示例#28
0
 def _save(self, name, content):
     """
     在FastDFS中保存文件
     :param name:  传入的文件名
     :param content:  传入的文件内容
     :return:  保存到数据库中的FastDFS的文件名
     """
     client = Fdfs_client(self.client_url)
     ret = client.upload_appender_by_buffer(content.read())
     if ret.get('Status') != 'Upload successed.':
         raise Exception('Upload file failed')
     file_name = ret.get('Remote file_id')
     return file_name
示例#29
0
 def create(self, request, *args, **kwargs):
     data = request.data
     ser = self.get_serializer(data=data)
     ser.is_valie()
     c = Fdfs_client(settings.FDFS_CONF_URL)
     filter = request.FILES.get("image")
     res = c.upload_appender_by_buffer(filter.read())
     # if filter
     image_url = res['Remote file_id']
     # 获取sku_id
     sku_id = request.data.get('sku')[0]
     # 保存图片
     img = SKUImage.objects.create(sku_id=sku_id, image=image_url)
     return img
示例#30
0
    def save(self, name, content):
        # 创建Fdfs_client对象 加载配置文件
        client = Fdfs_client(self.client_conf)

        # 上传文件到fastdfs
        res = client.upload_appender_by_buffer(content)
        # res = client.upload_appender_by_buffer(content.read())
        # res = client.upload_appender_by_filename(name)
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fastdfs失败')

        filename = res.get('Remote file_id')

        return filename