Ejemplo n.º 1
0
def main():
    parser = Parser()
    (options, args) = parser.parse_args()
    err = False

    init_signal()

    try:
        up = UpYun(options.bucket, options.user, options.passwd)
        res = up.usage()
    except UpYunClientException as e:
        err = True
        print "ClientError: " + e.message
    except UpYunServiceException as e:
        err = True
        print "ServiceError: " + e.message
    except:
        err = True

    if err:
        print "failed when log in ..."
        return

    if len(args) != 0:
        parser.error("Unexcepted arguments")
        sys.exit(0)

    if options.interactive:
        Interactive(up)
    else:
        handle(up, options)
Ejemplo n.º 2
0
def test_a(request):
    from checkpub.models import CheckPub
    pdb.set_trace()

    conn = UpYun('cpp19', 'one9', 'one9in1234')

    cp = CheckPub.objects.get(id=273344)
    cp_id = cp.id
    #user_id = cp.user.id

    op = os.path.abspath(os.path.curdir).split()
    #get current img path
    userp = cp.photo.url.split()
    op.extend(userp)
    img_path = ''.join(op)
    #open img
    data = open('%s' % img_path, 'rb')
    #设置待上传文件的 Content-MD5 值
    #如又拍云服务端收到的文件MD5值与用户设置的不一致,将回报 406 Not Acceptable 错误
    conn.setContentMD5(md5file(data))

    #img_format = cp.photo.url.rsplit(".")[-1]
    #user_img_jpg = '%d.%s'%(user_id,img_format)
    #user_img_jpg = '%d'%(user_id)

    result = conn.writeFile('%d' % cp_id, data)
    print result

    return HttpResponse("success")
Ejemplo n.º 3
0
class UpYunClient(object):
    '''
    '''
    def __init__(self):
        self.ftp_raw_info=open("upyun.txt").read().split(';')
        self.bucket_name=self.ftp_raw_info[0]
        self.server_user=self.ftp_raw_info[1]
        self.server_user_pwd = self.ftp_raw_info[2]
        self.base_access_url = self.ftp_raw_info[3]
        self.server = UpYun(self.bucket_name,self.server_user,self.server_user_pwd)
        self.server.setApiDomain('v0.api.upyun.com')
        
    def UpLoad(self,fileName):
        data = open(fileName,'rb')
        self.server.setContentMD5(md5file(data))
        date_info=datetime.datetime.today()
        remote_path=str(date_info.year)+'/'+str(date_info.month)
        remote_file_name = '/'+str(date_info.microsecond)+fileName.split('\\')[-1]
        
        to_write= remote_path+remote_file_name
        a = self.server.writeFile(to_write,data)
        
        if(a):
            return self.base_access_url+'/'+remote_path+remote_file_name
        else:
            return None
        
            
Ejemplo n.º 4
0
def main():
    parser = Parser()
    (options, args) = parser.parse_args()
    err = False

    init_signal()

    try:
        up = UpYun(options.bucket,
                   options.user,
                   options.passwd)
        res = up.usage()
    except UpYunClientException as e:
        err = True
        print "ClientError: " + e.message
    except UpYunServiceException as e:
        err = True
        print "ServiceError: " + e.message
    except:
        err = True

    if err:
        print "failed when log in ..."
        return

    if len(args) != 0:
        parser.error("Unexcepted arguments")
        sys.exit(0)

    if options.interactive:
        Interactive(up)
    else:
        handle(up, options)
Ejemplo n.º 5
0
 def setUp(self):
     self.client_file = UpYun(self.BUCKET_FILE,
             (self.USERNAME, self.PASSWD), const.SPACE_TYPE_FILE)
     self.client_image = UpYun(self.BUCKET_IMAGE,
             (self.USERNAME, self.PASSWD), const.SPACE_TYPE_IMAGE)
     self.test_file_txt = open(self.LOCAL_PATH_TXT_FILE)
     self.test_file_img = open(self.LOCAL_PATH_IMG_FILE, 'rb')
Ejemplo n.º 6
0
def upload(main_service_name, mode, service_name, username, password, f,
           path_name, domain, bot: Bot, chat_id, message_id):
    try:
        up = UpYun(service_name, username, password)
        up.put(path_name, f)
        cdn_url = "%s/%s" % (domain, path_name)

        bot.send_message(chat_id=chat_id,
                         text=upload_success(main_service_name, mode, cdn_url),
                         reply_to_message_id=message_id,
                         parse_mode=ParseMode.HTML)

    except UpYunServiceException as se:
        error_detail = """
        HTTP Status Code: %s
        Error Message: %s
        """ % (se.status, se.msg)

        bot.send_message(chat_id=chat_id,
                         text=upload_error(service_name, error_detail),
                         reply_to_message_id=message_id,
                         parse_mode=ParseMode.HTML)

    except UpYunClientException as ce:
        error_detail = """
        Error Message: %s
        """ % ce.msg

        bot.send_message(chat_id=chat_id,
                         text=upload_error(service_name, error_detail),
                         reply_to_message_id=message_id,
                         parse_mode=ParseMode.HTML)
Ejemplo n.º 7
0
class UpYunStore(object):
    APP_NAME = None
    USERNAME = None
    PASSWORD = None
    TMP_PATH = None

    def __init__(self, uri):
        assert uri.startswith('http://')
        self.upyun = UpYun(self.APP_NAME, self.USERNAME, self.PASSWORD)
        self.prefix = '/' + uri.split('/')[-1]

    def stat_image(self, key, info):
        image_info = self.upyun.getinfo(self.prefix + '/' + key)
        last_modified = int(image_info['date'])
        checksum = image_info['size']
        return {'last_modified': last_modified, 'checksum': checksum}

    def persist_image(self, key, image, buf, info):
        tmp_path = os.path.join(self.TMP_PATH, 'tmp.jpg')
        image.save(tmp_path)
        data = open(tmp_path, 'rb')
        result = self.upyun.put(self.prefix + '/' + key, data, True)
        if not result:
            log.info("Image: Upload image to Upyun Failed! %s" %
                     (self.prefix + key))
Ejemplo n.º 8
0
 def post(self):
     errors = []
     username = str(self.get_cookie('username',''))
     userflag = str(self.get_cookie('userflag',''))
     if not username or not userflag:
         self.write('403')
         return
     myfile = self.request.files.get('myfile',[0])[0]
     if myfile:
         im = Image.open(StringIO(myfile['body']))
         max_w = 73
         max_h = 73
         if im.size[0] > max_w or im.size[1] > max_w:
             ss = max(float(im.size[0])/max_w, float(im.size[1])/max_h)
             im = im.resize((int(im.size[0]/ss), int(im.size[1]/ss)), Image.ANTIALIAS)
         
         output = StringIO()
         im.convert('RGB').save(output, 'JPEG', quality = 95)#95
         img_data = output.getvalue()
         output.close()
         
         #self.set_header('Content-Type','image/jpeg')
         #self.write(img_data)
         #return
         
         if IMG_STORAGE=='sae':
             file_path_name = '%s.jpg'% username
             avatar = put_obj2storage(file_name = file_path_name, data = img_data, domain_name = DOMAIN_NAME_AVATAR)
         elif IMG_STORAGE=='upyun':
             u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER, UPYUN_PW)
             file_path_name = '/avatar/%s.jpg'% username
             avatar = u.writeFile( file_path_name, img_data, True)
         
         if avatar:
             if username == 'admin':
                 Member.set_flag(username, '99')
             if userflag == '1':
                 if Member.set_flag(username, '2'):
                     self.set_cookie('userflag', '2', path="/", expires_days = 365 )
                     clear_cache_multi(['cur_user:'******'/setavatar')
                     return
                 else:
                     errors.append('服务器暂时出错,请稍后再试')
             else:
                 self.redirect('/setavatar')
                 return
         else:
             errors.append('保存图片出错,请稍后再试')
     else:
         errors.append('图片没有正确上传')
         
     self.echo('setavatar.html', {
         'title': "设置头像",
         'errors':errors,
         'wb_avatar_large': '',
     }, layout='_layout.html')
Ejemplo n.º 9
0
def DeletePhoto(id):
    photo = model.Photo().get_by_id(int(id))
    if photo is not None:
        u = UpYun()
        if photo.imgurl is not None:
            path = photo.imgurl.replace('http://imgstore.b0.upaiyun.com', '')
            u.delete(path)
        photo.Album.PhotoCount -= 1
        photo.Album.put()
        photo.delete()
        memcache.delete('ALLALBUMS')
Ejemplo n.º 10
0
 def check_permission(self, space_name):
     # Set upyun information.
     username = raw_input("Username: "******"/") <> None:
         return True
     else:
         print "验证失败..."
         return False
Ejemplo n.º 11
0
    def __init__(self):
        super(PublicPage,self).__init__()
        setting = model.settings

        global yun
        yun= UpYun(username = setting.UpYunUser,password=setting.UpYunPass,bucket=setting.UpYunBucket)
        diskUsage = 0
        try:
            diskUsage = (yun.getBucketUsage()+.0)/1024/1024
        except Exception:
            pass
        self.usage = '%.2f M'%(diskUsage)
Ejemplo n.º 12
0
 def switch_bucket(self, bucket):
     """Switch to buckets defined in conf_file, and check if it's valid."""
     if self.options.has_section(bucket):
         params = {k: v.strip() for k, v in self.options.items(bucket)}
         params['bucket'] = bucket
         up = UpYun(**params)
         up.usage()
         self.pwd = '/'
         self.up = up
         self.update_prompt()
     else:
         self.output("bucket '%s' doesn't exist in the config file(%s)." %
                     (bucket, conf_path))
Ejemplo n.º 13
0
Archivo: upc.py Proyecto: likang/upc
 def switch_bucket(self, bucket):
     """Switch to buckets defined in conf_file, and check if it's valid."""
     if self.options.has_section(bucket):
         params = {k: v.strip() for k, v in self.options.items(bucket)}
         params['bucket'] = bucket
         up = UpYun(**params)
         up.usage()
         self.pwd = '/'
         self.up = up
         self.update_prompt()
     else:
         self.output("bucket '%s' doesn't exist in the config file(%s)." % (
             bucket, conf_path))
Ejemplo n.º 14
0
    def __init__(self):
        super(PublicPage, self).__init__()
        setting = model.settings

        global yun
        yun = UpYun(username=setting.UpYunUser,
                    password=setting.UpYunPass,
                    bucket=setting.UpYunBucket)
        diskUsage = 0
        try:
            diskUsage = (yun.getBucketUsage() + .0) / 1024 / 1024
        except Exception:
            pass
        self.usage = '%.2f M' % (diskUsage)
Ejemplo n.º 15
0
    def post(self):
        self.set_header('Content-Type', 'text/html')
        rspd = {'status': 201, 'msg': 'ok'}

        n_id = str(self.get_argument('id', ''))
        if n_id:
            filetoupload = self.request.files.get('filetoupload', '')

            if filetoupload:
                myfile = filetoupload[0]
                ##
                im = Image.open(StringIO(myfile['body']))
                if im.size[0] > 73 or im.size[1] > 73:
                    th = max(float(im.size[0]) / 73, float(im.size[1]) / 73)
                    box = (int(im.size[0] / th), int(im.size[1] / th))
                    im = im.resize(box, Image.ANTIALIAS)
                else:
                    pass

                #normal
                output = StringIO()
                im.convert('RGB').save(output, 'JPEG', quality=90)  #95
                img_data = output.getvalue()
                output.close()

                if IMG_STORAGE == 'sae':
                    file_path_name = 'node-img-%s.jpg' % n_id
                    uimg = put_obj2storage(file_name=file_path_name,
                                           data=img_data,
                                           domain_name=DOMAIN_NAME_UPLOAD)
                    rspd['url'] = uimg
                elif IMG_STORAGE == 'upyun':
                    file_path_name = '/nodeimg/%s.jpg' % n_id
                    u = UpYun(DOMAIN_NAME_UPLOAD, UPYUN_USER, UPYUN_PW)
                    uimg = u.writeFile(file_path_name, img_data, True)
                    rspd['url'] = UPLOAD_BASE_URL + file_path_name

                if uimg:
                    rspd['status'] = 200
                    rspd['msg'] = u'图片已成功上传'
                else:
                    rspd['status'] = 500
                    rspd['msg'] = u'图片上传失败,可能是网络问题或图片太大,请刷新本页上传'

            else:
                rspd['msg'] = u'没有上传图片'
        else:
            rspd['msg'] = u'id 传入错误'
        self.write(json.dumps(rspd))
        return
Ejemplo n.º 16
0
def upimg_delete(sha, upload_path, filename, basedir, save_result):
    try:
        from upyun import UpYun, ED_AUTO
    except ImportError:
        raise ImportError("Please install upyun module")
    else:
        bucket = g.cfg.upyun_bucket
        user = g.cfg.upyun_username
        passwd = g.cfg.upyun_password
        upyun_basedir = g.cfg.upyun_basedir or '/'
        if not upyun_basedir.startswith("/"):
            upyun_basedir = "/%s" % upyun_basedir
        up = UpYun(bucket, user, passwd, timeout=5, endpoint=ED_AUTO)
        filepath = join(basedir or upyun_basedir, upload_path, filename)
        up.delete(filepath)
Ejemplo n.º 17
0
 def post(self):
     self.set_header('Content-Type','text/html')
     rspd = {'status': 201, 'msg':'ok'}
     
     n_id = str(self.get_argument('id',''))
     if n_id:
         filetoupload = self.request.files.get('filetoupload','')
         
         if filetoupload:
             myfile = filetoupload[0]
             ##
             im = Image.open(StringIO(myfile['body']))
             if im.size[0] > 73 or im.size[1] > 73:
                 th = max(float(im.size[0])/73,float(im.size[1])/73)
                 box = (int(im.size[0]/th), int(im.size[1]/th))
                 im = im.resize(box, Image.ANTIALIAS)
             else:
                 pass
             
             #normal
             output = StringIO()
             im.convert('RGB').save(output, 'JPEG', quality = 90)#95
             img_data = output.getvalue()
             output.close()
             
             if IMG_STORAGE=='sae':
                 file_path_name = 'node-img-%s.jpg'%n_id
                 uimg = put_obj2storage(file_name = file_path_name, data = img_data, domain_name = DOMAIN_NAME_UPLOAD)
                 rspd['url'] = uimg
             elif IMG_STORAGE=='upyun':
                 file_path_name = '/nodeimg/%s.jpg'%n_id
                 u = UpYun(DOMAIN_NAME_UPLOAD, UPYUN_USER, UPYUN_PW)
                 uimg = u.writeFile( file_path_name, img_data, True)
                 rspd['url'] = UPLOAD_BASE_URL + file_path_name
             
             if uimg:
                 rspd['status'] = 200
                 rspd['msg'] = u'图片已成功上传'
             else:
                 rspd['status'] = 500
                 rspd['msg'] = u'图片上传失败,可能是网络问题或图片太大,请刷新本页上传'
             
         else:
             rspd['msg'] = u'没有上传图片'
     else:
         rspd['msg'] = u'id 传入错误'
     self.write(json.dumps(rspd))
     return
Ejemplo n.º 18
0
    def up_img(self, sourceurl) :
        u = UpYun(UPCONFIG['bucket'], UPCONFIG['username'], UPCONFIG['password'])
        #按星期建立目录
        _dir = time.strftime('%y%U', time.localtime(time.time()))
        #获取文件后缀
        _m = re.compile('\.\w+$').search(sourceurl)
        if(_m):
            filetype = _m.group()
        else:
            filetype = '.jpg'
        #下载到本地文件
        localfile = TMPFILE_DIR + str(int(time.time())) + filetype

        if not u.mkDir(_dir) :
            return False

        #img_file = urllib.urlopen(sourceurl, 'rb')
        if(sourceurl[0:4] == 'http'):
            try :
                os.popen('wget "' + sourceurl + '" -q -O ' + localfile)
            except :
                return False
        else:
            localfile = sourceurl
        img_file = open(localfile, 'rb')
        bfile = img_file.read()

        #源文件md5之后取前16位作为文件名
        filename = md5(bfile)[0:16]
        #上传到upyun文件
        upfile = _dir + '/' + filename + filetype
            
        if not u.writeFile(upfile, bfile) :
            os.remove(localfile)
            return False

        rgb = self.rbg_img(localfile)
        _img = Image.open(localfile)
        size = _img.size
        if _img.size[0] < 480 or _img.size[1] < 360:
            return {'toosmall' : True}
        
        height = int(size[1] * (640.0/size[0]))
        ret_data = {'url':upfile,'rgb':rgb, 'height' : height}

        os.remove(localfile)
        return ret_data
Ejemplo n.º 19
0
 def __init__(self):
     self.ftp_raw_info=open("upyun.txt").read().split(';')
     self.bucket_name=self.ftp_raw_info[0]
     self.server_user=self.ftp_raw_info[1]
     self.server_user_pwd = self.ftp_raw_info[2]
     self.base_access_url = self.ftp_raw_info[3]
     self.server = UpYun(self.bucket_name,self.server_user,self.server_user_pwd)
     self.server.setApiDomain('v0.api.upyun.com')
Ejemplo n.º 20
0
    def post(self):
        if self.cur_user:
            file_content = self.request.get('myfile', '')
            errors = []
            if file_content:
                imgobj = images.Image(file_content)
                if imgobj.width <= 73 and imgobj.height <= 73:
                    img_large = file_content
                else:
                    imgobj.resize(73, 73)
                    imgobj.im_feeling_lucky()
                    img_large = imgobj.execute_transforms(
                        output_encoding=images.JPEG, quality=95)

                u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER, UPYUN_PW)
                file_path_name = '/avatar/%s.jpg' % self.cur_user.name
                avatar = u.writeFile(file_path_name, img_large, True)

                if avatar:
                    m_obj = Member.get_by_key_name(self.cur_user.name)
                    if m_obj:
                        if m_obj.flag == 1:
                            if m_obj.id == 1:
                                m_obj.flag = 99
                            else:
                                m_obj.flag = 2
                            db.run_in_transaction(
                                obj_runput, m_obj,
                                ['cur_user:'******'/setavatar')
                    return
                else:
                    errors.append('服务器出现意外错误,请稍后再试')
            else:
                self.echo('setavatar.html', {
                    'title': "设置头像",
                    'errors': errors,
                    'newest_node': Node.get_newest(),
                },
                          layout='_layout.html')

        else:
            self.redirect('/')
Ejemplo n.º 21
0
def app(environ, start_response):
    path = environ['PATH_INFO']
    data = ''
    if path == "/list.html":
        query = environ['QUERY_STRING']
        m = re.match(r'^dir=/([^/]*)(.*)', query)
        bucket, fpath = m.group(1), m.group(2)

        up = UpYun(bucket = bucket, username = config.username, 
                password = config.password
            )

        info = up.getinfo(key = fpath)
        if info['file-type'] == 'folder':
            status = '200 OK'
            data = listdir(up, bucket, fpath)
            start_response(status, [
                ("Content-Type", "text/html"),
                ("Content-Length", str(len(data)))
            ])
        else:
            status = '302 Temporarily Moved'
            start_response(status, [
                ("Content-Type", "text/plain"),
                ("Content-Length", str(len(data)))
                (
                    "Location", "http://%s.b0.upaiyun.com%s" % 
                    (bucket, fpath)
                ),
            ])
    elif path == "/upload.html":
        m = re.match(r'uri=(.*)&dir=/([^/]*)(.*)', environ['QUERY_STRING'])
        uri, bucket, fpath = m.group(1), m.group(2), m.group(3)
        blob = ''
        resp = requests.get(uri, stream=True, timeout=5)
        for chunk in resp.iter_content(8192):
            if not chunk:
                break
            blob += chunk
        if blob != '':
            up = UpYun(bucket = bucket, username = config.username, 
                    password = config.password
                )
            up.put(fpath, blob)
        data = '%s Upload to /%s%s .. OK' % (uri, bucket, fpath)

    else:
        status = '200 OK'
        data += '<h1>usage</h1>\n'
        data += '<p>/list.html?dir=</bucket/path/to/file></p>\n'
        data += '<p>/post.html?uri=<uri>&&dir=</bucket/path/to/file></p>\n'
        start_response(status, [
            ("Content-Type", "text/html"),
            ("Content-Length", str(len(data)))
        ])

    return iter([data])
Ejemplo n.º 22
0
 def check_permission(self, space_name):
     # Set upyun information.
     username = raw_input("Username: "******"/") <> None:
         return True
     else:
         print "验证失败..."
         return False
Ejemplo n.º 23
0
def upimg_save(**kwargs):
    res = dict(code=1)
    try:
        filename = kwargs["filename"]
        stream = kwargs["stream"]
        upload_path = kwargs.get("upload_path") or ""
        if not filename or not stream:
            return ValueError
    except (KeyError, ValueError):
        res.update(msg="Parameter error")
    else:
        try:
            from upyun import UpYun, ED_AUTO
        except ImportError:
            res.update(msg="Please install upyun module")
            return res
        dn = g.cfg.upyun_dn
        bucket = g.cfg.upyun_bucket
        user = g.cfg.upyun_username
        passwd = g.cfg.upyun_password
        upyun_basedir = g.cfg.upyun_basedir or '/'
        if not dn or not bucket or not user or not passwd:
            res.update(msg="The upyun parameter error")
            return res
        if isinstance(upload_path, string_types):
            if upload_path.startswith("/"):
                upload_path = upload_path.lstrip('/')
            if not upyun_basedir.startswith("/"):
                upyun_basedir = "/%s" % upyun_basedir
            saveto = join(upyun_basedir, upload_path)
            filepath = join(saveto, filename)
            up = UpYun(bucket, user, passwd, timeout=5, endpoint=ED_AUTO)
            res.update(up.put(filepath, stream))
            res.update(
                code=0,
                src=slash_join(dn, filepath),
                basedir=upyun_basedir,
            )
        else:
            res.update(msg="The upload_path type error")
    return res
Ejemplo n.º 24
0
def upload_drawing_bed(request, img_name, files, bed_default_types):
    if bed_default_types == 'qiniu':
        qiniu_settings = DrawingBedSetting.objects.filter(
            types=bed_default_types, create_user=request.user)
        if qiniu_settings.count() == 8:
            qiniu_access_key, qiniu_secret_key, qiniu_storage_space_name, qiniu_visit_website, qiniu_storage_area, \
            qiniu_url_suffix, qiniu_storage_path, qiniu_default_types = get_drawing_beds(request, 'qiniu')
            access_key = qiniu_access_key.value
            secret_key = qiniu_secret_key.value
            # 构建鉴权对象
            q = Auth(access_key, secret_key)
            # 要上传的空间
            bucket_name = qiniu_storage_space_name.value
            # 上传后保存的文件名
            key = qiniu_storage_path.value + img_name
            # 生成上传 Token,可以指定过期时间等
            token = q.upload_token(bucket_name, key, 3600)
            # 要上传文件的本地路径
            ret, info = put_data(token, key, files)
            if ret and info:
                file_url = qiniu_visit_website.value + '/' + ret.get(
                    'key') + qiniu_url_suffix.value
                return file_url
            else:
                return False
    if bed_default_types == 'upyun':
        upyun_access_key, upyun_secret_key, upyun_storage_space_name, upyun_visit_website, upyun_url_suffix, \
        upyun_storage_path, upyun_default_types = get_drawing_beds(request, bed_default_types)
        up = UpYun(upyun_storage_space_name.value,
                   username=upyun_access_key.value,
                   password=upyun_secret_key.value)
        # 上传后保存的文件名
        key = upyun_storage_path.value + img_name
        # headers = {'x-gmkerl-rotate': '180'}
        res = up.put(key=key, value=files, checksum=False)
        if res.get('file-type'):
            file_url = upyun_visit_website.value + '/' + key + upyun_url_suffix.value
            return file_url
        else:
            return False
Ejemplo n.º 25
0
    def post(self):
        if self.cur_user and self.cur_user.flag == 99:
            self.header['Content-Type'] = "text/html"
            rspd = {'status': 201, 'msg': 'ok'}

            n_id = self.request.get('id')
            if n_id:
                file_content = self.request.get('filetoupload', '')
                if file_content:
                    imgobj = images.Image(file_content)
                    if imgobj.width <= 73 and imgobj.height <= 73:
                        img_large = file_content
                    else:
                        imgobj.resize(73, 73)
                        imgobj.im_feeling_lucky()
                        img_large = imgobj.execute_transforms(
                            output_encoding=images.JPEG, quality=95)

                    file_path_name = '/nodeimg/%s.jpg' % n_id
                    u = UpYun(DOMAIN_NAME_UPLOAD, UPYUN_USER, UPYUN_PW)
                    uimg = u.writeFile(file_path_name, img_large, True)

                    if uimg:
                        rspd['status'] = 200
                        rspd['msg'] = u'图片已成功上传'
                        rspd['url'] = UPLOAD_URL + file_path_name
                    else:
                        rspd['status'] = 500
                        rspd['msg'] = u'图片上传失败,可能是网络问题或图片太大,请刷新本页再上传'
                else:
                    rspd['msg'] = u'没有上传图片'
            else:
                rspd['msg'] = u'id 传入错误'

            self.write(json.dumps(rspd))
        else:
            self.error(403)
            self.write('403:forbidden')
Ejemplo n.º 26
0
    def post(self, username, img_max_size):
        if self.cur_user and self.cur_user.flag > 1:
            self.header['Content-Type'] = "text/html"
            rspd = {'status': 201, 'msg': 'ok'}

            file_content = self.request.get('filetoupload', '')
            if file_content:
                imgobj = images.Image(file_content)
                max_w = int(img_max_size)
                if imgobj.width <= max_w:
                    #img_data = file_content
                    pass
                else:
                    imgobj.resize(width=max_w)
                imgobj.im_feeling_lucky()

                img_data = imgobj.execute_transforms(
                    output_encoding=images.JPEG, quality=90)

                file_path_name = '/%s/%s.jpg' % (str(username), str(int(
                    time())))
                u = UpYun(DOMAIN_NAME_UPLOAD, UPYUN_USER, UPYUN_PW)
                uimg = u.writeFile(file_path_name, img_data, True)

                if uimg:
                    rspd['status'] = 200
                    rspd['msg'] = u'图片已成功上传'
                    rspd['url'] = UPLOAD_URL + file_path_name
                else:
                    rspd['status'] = 500
                    rspd['msg'] = u'图片上传失败,可能是网络问题或图片太大,请刷新本页再上传'
            else:
                rspd['msg'] = u'没有上传图片'
            self.write(json.dumps(rspd))
        else:
            self.error(403)
            self.write('403:forbidden')
Ejemplo n.º 27
0
class UpYunStore(object):
    APP_NAME = None
    USERNAME = None
    PASSWORD = None
    TMP_PATH = None

    def __init__(self, uri):
        assert uri.startswith('http://')
        self.upyun = UpYun(self.APP_NAME, self.USERNAME, self.PASSWORD)
        self.prefix = '/' + uri.split('/')[-1]

    def stat_image(self, key, info):
        image_info = self.upyun.getinfo(self.prefix + '/' + key)
        last_modified = int(image_info['date'])
        checksum = image_info['size']
        return {'last_modified': last_modified, 'checksum': checksum}

    def persist_image(self, key, image, buf, info):
        tmp_path = os.path.join(self.TMP_PATH, 'tmp.jpg')
        image.save(tmp_path)
        data = open(tmp_path, 'rb')
        result = self.upyun.put(self.prefix + '/' + key, data, True)
        if not result:
            log.info("Image: Upload image to Upyun Failed! %s" % (self.prefix + key))
Ejemplo n.º 28
0
def upload_pic(pic, code, up_type='ava'):
	#pdb.set_trace()

	try:
		ext_name = ''
		if up_type == 'ava':
			conn = UpYun('one9inava', 'one9', 'one9in1234')
		elif up_type == 'vid':
			conn = UpYun('vid19', 'one9', 'one9in1234')
			ext_name = '_cpp.mp4'
		elif up_type == 'avd':
			conn = UpYun('vid19', 'one9', 'one9in1234')
			ext_name = '_ava.mp4'
		else:
			conn = UpYun('cpp19', 'one9', 'one9in1234')

		if 'http' in pic.name:
			data = ContentFile(urllib2.urlopen(pic.name).read())	
			data.seek(0)
		elif 'default' in pic.name:
			return True
		else:
			try:
				pic.seek(0)
				data = pic
			except:
				print 'no pic'
				return False
			#conn.setContentMD5(md5file(pic))
			#result = conn.writeFile('%d' % code, pic)
			#data.write(pic.read())
			#data.seek(0)

		conn.setContentMD5(md5file(data))

		#result = conn.deleteFile('%d' % code)
		result = conn.writeFile('%s%s' % (code, ext_name), data)
		
		print result
		data.close()
		if result:
			print 'ok!!'
			return True
		else:
			print 'nok'
			return False
	except Exception, ex:
		print Exception,":",ex
		return False
Ejemplo n.º 29
0
def upload_pic(pic, code, up_type='ava'):
    #pdb.set_trace()

    try:
        ext_name = ''
        if up_type == 'ava':
            conn = UpYun('one9inava', 'one9', 'one9in1234')
        elif up_type == 'vid':
            conn = UpYun('vid19', 'one9', 'one9in1234')
            ext_name = '_cpp.mp4'
        elif up_type == 'avd':
            conn = UpYun('vid19', 'one9', 'one9in1234')
            ext_name = '_ava.mp4'
        else:
            conn = UpYun('cpp19', 'one9', 'one9in1234')

        if 'http' in pic.name:
            data = ContentFile(urllib2.urlopen(pic.name).read())
            data.seek(0)
        elif 'default' in pic.name:
            return True
        else:
            try:
                pic.seek(0)
                data = pic
            except:
                print 'no pic'
                return False
            #conn.setContentMD5(md5file(pic))
            #result = conn.writeFile('%d' % code, pic)
            #data.write(pic.read())
            #data.seek(0)

        conn.setContentMD5(md5file(data))

        #result = conn.deleteFile('%d' % code)
        result = conn.writeFile('%s%s' % (code, ext_name), data)

        print result
        data.close()
        if result:
            print 'ok!!'
            return True
        else:
            print 'nok'
            return False
    except Exception, ex:
        print Exception, ":", ex
        return False
Ejemplo n.º 30
0
    def post(self):
        req_user = self.request.user
        gu_obj = GoogleUser.get_or_insert(req_user.email())
        if gu_obj.name:
            self.redirect('/')
            return

        errors = []
        name = self.POST['name'].strip().lower()
        if name:
            if len(name) < 20:
                if re.search('^[a-zA-Z0-9]+$', name):
                    check_obj = Member.get_by_key_name(str(name))
                    if check_obj:
                        errors.append('该用户名已被注册,请换一个吧')
                    else:
                        #get member id
                        mid_obj = Counter.get_or_insert(
                            'member_auto_increment',
                            name='member_auto_increment',
                            value=1)
                        nuser_obj = Member(key_name=name,
                                           id=mid_obj.value,
                                           flag=1,
                                           add=int(time()))
                        nuser_obj.put()
                        if nuser_obj.is_saved():
                            #set google user
                            gu_obj.name = name
                            db.run_in_transaction(obj_runput, gu_obj)
                            #all member num +1
                            mid_obj.value += 1
                            db.run_in_transaction(obj_runput, mid_obj)

                            #try to Fetch Google Plus Profile Picture
                            try:
                                img_url = 'https://profiles.google.com/s2/photos/profile/' + req_user.nickname(
                                )
                                img_data = read_img(img_url)
                                #self.header['Content-Type'] = "image/jpg"
                                if img_data:
                                    pass
                                else:
                                    img_url = 'https://www.gravatar.com/avatar/%s?s=73&d=monsterid' % md5(
                                        req_user.email()).hexdigest()
                                    img_data = read_img(img_url)

                                if img_data:
                                    imgobj = images.Image(img_data)
                                    if imgobj.width <= 73 and imgobj.height <= 73:
                                        img_large = img_data
                                    else:
                                        imgobj.resize(73, 73)
                                        imgobj.im_feeling_lucky()
                                        img_large = imgobj.execute_transforms(
                                            output_encoding=images.JPEG,
                                            quality=95)

                                    u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER,
                                              UPYUN_PW)
                                    file_path_name = '/avatar/%s.jpg' % self.cur_user.name
                                    avatar = u.writeFile(
                                        file_path_name, img_large, True)

                                    if avatar:
                                        m_obj = self.cur_user  #Member.get_by_key_name(self.cur_user.name)
                                        if m_obj.flag == 1:
                                            if m_obj.id == 1:
                                                m_obj.flag = 99
                                            else:
                                                m_obj.flag = 2
                                            db.run_in_transaction(
                                                obj_runput, m_obj, [
                                                    'cur_user:'******'Fetch Google Plus Profile Picture Failure: '
                                    + req_user.email())
                            #
                            self.redirect('/setavatar')
                            return
                        else:
                            errors.append('服务器出现意外错误,请稍后再试')
                else:
                    errors.append('用户名只能包含字母和数字')
            else:
                errors.append('用户名太长了')
        else:
            errors.append('用户名必填')

        self.echo('setname.html', {
            'title': "设置名字",
            'errors': errors,
            'name': name,
            'newest_node': Node.get_newest(),
        },
                  layout='_layout.html')
Ejemplo n.º 31
0
 def get(self):
     #尝试读取QQ空间头像
     wb_avatar_large = ''
     qq = self.get_argument('qq', '')
     if qq=='1':
         username = str(self.get_cookie('username',''))
         open_id = str(self.get_cookie('open_id',''))
         access_token = str(self.get_cookie('access_token',''))
         userflag = str(self.get_cookie('userflag',''))
         if username and open_id and access_token and userflag:
             qq_user = qqclient.get_user_info(access_token, open_id)
             #qq_user { "ret":0, "msg":"", "nickname":"qq nicke name", "figureurl_2":"http://qzapp.qlogo.cn/qzapp/100254539/5BDCA5E6321B273E44720E532B1379ED/100" }
             #保存有用的信息
             #id = str(open_id)
             #name = en_code(qq_user['nickname'])
             wb_avatar_large = str(qq_user.get('figureurl_2',''))
             
             headers = {
                 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',
                 'Referer':wb_avatar_large,
             }
             req = urllib2.Request(
                 url = wb_avatar_large,
                 headers = headers
             )
             data = urllib2.urlopen(req).read()
             if data:
                 im = Image.open(StringIO(data))
                 if im.size[0] > 73 or im.size[1] > 73:
                     ss = max(float(im.size[0])/73, float(im.size[1])/73)
                     box = (int(im.size[0]/ss), int(im.size[1]/ss))
                     im = im.resize(box, Image.ANTIALIAS)
                     output = StringIO()
                     im.convert('RGB').save(output, 'JPEG', quality = 95)#95
                     img_data = output.getvalue()
                     output.close()
                     
                 else:
                     img_data = data
                 
                 if IMG_STORAGE=='sae':
                     file_path_name = '%s.jpg'% username
                     avatar = put_obj2storage(file_name = file_path_name, data = img_data, domain_name = DOMAIN_NAME_AVATAR)
                 elif IMG_STORAGE=='upyun':
                     u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER, UPYUN_PW)
                     file_path_name = '/avatar/%s.jpg'% username
                     avatar = u.writeFile( file_path_name, img_data, True)
                 
                 if avatar:
                     if userflag == '1':
                         if Member.set_flag(username, '2'):
                             self.set_cookie('userflag', '2', path="/", expires_days = 365 )
                             clear_cache_multi(['cur_user:'******'/')
                             #return
     
     self.echo('setavatar.html', {
         'title': "设置头像",
         'errors':[],
         'newest_node': Node.get_newest(),
         'wb_avatar_large': wb_avatar_large,
     }, layout='_layout.html')
Ejemplo n.º 32
0
 def __init__(self, uri):
     assert uri.startswith('http://')
     self.upyun = UpYun(self.APP_NAME, self.USERNAME, self.PASSWORD)
     self.prefix = '/' + uri.split('/')[-1]
Ejemplo n.º 33
0
class Build(object):
    '''
    class docs
    '''
    def __init__(self, space_name, action_type, input_data_dir,
                 output_data_dir, server_data_dir, action):
        '''
        init docs
        '''
        # Init.
        self.space_name = space_name
        self.input_data_dir = input_data_dir
        self.output_data_dir = output_data_dir
        self.server_data_dir = server_data_dir
        self.action = action

        if not os.path.exists(DATA_ORIGIN_DIR):
            create_directory(DATA_ORIGIN_DIR)

        self.data_origin_file = os.path.join(DATA_ORIGIN_DIR,
                                             "%s.tar.gz" % self.space_name)

        if action_type == BUILD_ORIGIN_DATA:
            self.build_origin_data(self.action[1])
        if action_type == BUILD_UPDATE_PATCH:
            self.build_update_patch(self.action[1])

    def check_permission(self, space_name):
        # Set upyun information.
        username = raw_input("Username: "******"/") <> None:
            return True
        else:
            print "验证失败..."
            return False

    def upload_file(self, local_file, remote_file, data_name):
        if self.server.getFileInfo(remote_file):
            print "%s: 删除远端%s..." % (self.space_name, data_name)
            self.server.deleteFile(remote_file)
            print "%s: 删除远端%s完成" % (self.space_name, data_name)

        print "%s: 上传远端%s..." % (self.space_name, data_name)
        self.server.setContentMD5(md5_file(local_file))
        with open(local_file, "rb") as patch_list_file:
            if self.server.writeFile(remote_file, patch_list_file.read(),
                                     True):
                print "%s: 上传远端%s成功" % (self.space_name, data_name)
            else:
                print "%s: 上传远端%s失败" % (self.space_name, data_name)

    def delete_remote_file(self, remote_file, data_name):
        if self.server.getFileInfo(remote_file):
            print "%s: 删除远端%s..." % (self.space_name, data_name)
            self.server.deleteFile(remote_file)
            print "%s: 删除远端%s完成" % (self.space_name, data_name)
        else:
            print "%s: 远端不存在%s" % (self.space_name, data_name)

    def build_origin_data(self, action):
        if action == "build":
            # Delete origin data
            remove_file(self.data_origin_file)

            # Build origin data.
            print "%s: 创建本地原始数据..." % (self.space_name)
            with tarfile.open(self.data_origin_file, "w:gz") as tar:
                for root, dir, files in os.walk(self.input_data_dir):
                    for file in files:
                        fullpath = os.path.join(root, file)
                        tar.add(fullpath,
                                fullpath.split(self.input_data_dir)[1], False)
            print "%s: 创建本地原始数据完成" % (self.space_name)
            with open(TIME_FLAG_FILE, 'w') as fp:
                s = get_current_time("%Y_%m_%d_%H:%M:%S")
                fp.write(s)

        if action == "upload" and self.check_permission(self.space_name):
            remote_origin_file_path = os.path.join(
                self.server_data_dir, "origin",
                md5_file(self.data_origin_file), "%s.tar.gz" % self.space_name)
            self.upload_file(self.data_origin_file, remote_origin_file_path,
                             "原始数据")

    def build_update_patch(self, action):
        if os.path.exists(self.data_origin_file):
            self.output_patch_dir = os.path.join(self.output_data_dir, "patch")
            if not os.path.exists(self.output_patch_dir):
                create_directory(self.output_patch_dir)

            self.output_temp_dir = os.path.join(self.output_data_dir, "temp")
            self.output_temp_file = os.path.join(self.output_temp_dir,
                                                 "%s.tar.gz" % self.space_name)
            self.output_temp_patch_file = os.path.join(self.output_temp_dir,
                                                       "patch")

            self.patch_md5_file = os.path.join(self.output_patch_dir,
                                               "patch_md5.json")
            self.origin_data_md5 = md5_file(self.data_origin_file)
            if not os.path.exists(self.patch_md5_file):
                self.patch_md5_json = {}
                self.patch_md5_json["origin_data"] = self.origin_data_md5
                self.patch_md5_json["current_patch"] = []
            else:
                self.patch_md5_json = json.load(open(self.patch_md5_file))

            if self.patch_md5_json["origin_data"] != self.origin_data_md5:
                self.patch_md5_json["origin_data"] = self.origin_data_md5
                self.patch_md5_json["current_patch"] = []

            self.remote_patch_dir = os.path.join(self.server_data_dir, "patch")

            if action == "build":
                # Delete temp directory first.
                create_directory(self.output_temp_dir, True)

                # Build temp file.
                print "%s: 创建本地更新数据..." % self.space_name
                with tarfile.open(self.output_temp_file, "w:gz") as tar:
                    for root, dir, files in os.walk(self.input_data_dir):
                        for file in files:
                            fullpath = os.path.join(root, file)
                            tar.add(fullpath,
                                    fullpath.split(self.input_data_dir)[1],
                                    False)
                print "%s: 创建本地更新数据完成" % self.space_name

                print "%s: 生成补丁文件..." % self.space_name
                subprocess.Popen("xdelta3 -ves %s %s %s" %
                                 (self.data_origin_file, self.output_temp_file,
                                  self.output_temp_patch_file),
                                 shell=True).wait()

                newest_patch_file_md5 = md5_file(self.output_temp_patch_file)
                current_patch_dict = self.patch_md5_json.get("current_patch")
                if current_patch_dict:
                    last_patch_md5 = current_patch_dict[0]["md5"]
                    if last_patch_md5 == newest_patch_file_md5:
                        remove_directory(self.output_temp_dir)
                        print "%s: input_data数据未做任何改变,删除相同补丁文件" % self.space_name
                        sys.exit(0)
                else:
                    current_patch_dict = []
                newest_patch_dir = os.path.join(self.output_patch_dir,
                                                self.origin_data_md5)
                if not os.path.exists(newest_patch_dir):
                    create_directory(newest_patch_dir)

                newest_patch_name = "%s-%s.xd3" % (
                    self.space_name, get_current_time("%Y_%m_%d_%H:%M:%S"))
                newest_patch_file = os.path.join(newest_patch_dir,
                                                 newest_patch_name)

                os.renames(self.output_temp_patch_file, newest_patch_file)
                remove_directory(self.output_temp_dir)
                current_patch_dict.insert(0, {
                    "name": newest_patch_name,
                    "md5": newest_patch_file_md5
                })
                print "%s: 生成补丁文件完成" % self.space_name

                print "%s: 写入补丁md5..." % self.space_name
                self.patch_md5_json["current_patch"] = current_patch_dict
                with open(self.patch_md5_file, "w") as fp:
                    json.dump(self.patch_md5_json, fp)
                print "%s: 写入补丁md5完成" % self.space_name

            elif action == "upload" and self.check_permission(self.space_name):
                # Upload patch file.
                current_patch_dict = self.patch_md5_json.get("current_patch")
                if current_patch_dict != []:
                    if len(current_patch_dict) > 2:
                        print "%s: 清理多余的补丁" % self.space_name
                        spare_patchs = current_patch_dict[2:]
                        current_patch_dict = current_patch_dict[:2]
                        for patch in spare_patchs:
                            patch_name = patch["name"].encode("utf-8")
                            local_path = os.path.join(self.output_patch_dir,
                                                      self.origin_data_md5,
                                                      patch_name)
                            try:
                                remove_file(local_path)
                                print "%s: 清除了补丁%s" % (self.space_name,
                                                       patch_name)
                            except:
                                pass
                            remote_path = os.path.join(self.remote_patch_dir,
                                                       self.origin_data_md5,
                                                       patch_name)
                            self.delete_remote_file(remote_path, patch_name)
                        self.patch_md5_json[
                            "current_patch"] = current_patch_dict
                        with open(self.patch_md5_file, "w") as fp:
                            json.dump(self.patch_md5_json, fp)

                    newest_patch_name = current_patch_dict[0]["name"].encode(
                        "utf-8")
                    newest_patch_file = os.path.join(self.output_patch_dir,
                                                     self.origin_data_md5,
                                                     newest_patch_name)
                    remote_patch_file = os.path.join(self.remote_patch_dir,
                                                     self.origin_data_md5,
                                                     newest_patch_name)
                    remote_patch_md5_file = os.path.join(
                        self.remote_patch_dir, self.origin_data_md5,
                        "patch_md5.json")

                    # upload newest_patch_file
                    self.upload_file(newest_patch_file, remote_patch_file,
                                     "补丁更新数据")

                    # Update patch list file.
                    self.upload_file(self.patch_md5_file,
                                     remote_patch_md5_file, "补丁md5列表文件")
                else:
                    print "%s: 当前没有任何补丁,请打好补丁再上传吧!" % self.space_name
        else:
            print "%s: %s 不存在, 无法进行补丁的创建和上传" % (self.space_name,
                                                self.data_origin_file)
Ejemplo n.º 34
0
def test_dd(request):
    u = UpYun('newavatar', 'one9', 'one9in1234')
    #查看版本信息
    #print u.version()

    #设定api所调用的域名
    #u.setApiDomain('v0.api.upyun.com')

    #创建目录
    #a = u.mkDir('/testa')
    #print a
    #a = u.mkDir('/a/b/c', True) 可自动创建父级目录(最多10级)

    #显示目录下的文件
    #a = u.readDir('/test/')
    #for i in a:
    #    print i.filename

    #开启调试
    #u.debug = True
    #get user
    pdb.set_trace()

    user = User.objects.get(id=301)
    user_id = user.id
    pro = user.get_profile()
    #get user avatar url
    url_avatar = pro.avatar.url
    dir_path = url_avatar.split("/")
    del dir_path[-1]
    #get upload file path
    file_path = "/".join(dir_path)
    #create dir
    a = u.mkDir('%s' % file_path, True)
    #get current dir path
    op = os.path.abspath(os.path.curdir).split()
    #get current img path
    userp = url_avatar.split()
    op.extend(userp)
    img_path = ''.join(op)
    #open img
    data = open('%s' % img_path, 'rb')
    #设置待上传文件的 Content-MD5 值
    #如又拍云服务端收到的文件MD5值与用户设置的不一致,将回报 406 Not Acceptable 错误
    u.setContentMD5(md5file(data))

    #置待上传文件的 访问密钥(注意:仅支持图片空!,设置密钥后,无法根据原文件URL直接访问,需带 URL 后面加上 (缩略图间隔标志符+密钥) 进行访问)
    #如缩略图间隔标志符为 ! ,密钥为 bac,上传文件路径为 /folder/test.jpg ,那么该图片的对外访问地址为: http://空间域名/folder/test.jpg!bac
    #u.setFileSecret('bbbb')

    #开始上传文件
    pdb.set_trace()
    #get upload img path
    file_path = file_path.split()
    img_format = url_avatar.rsplit(".")[-1]
    user_img_jpg = '%s.%s' % (user_id, img_format)
    file_path.append(user_img_jpg)
    upload_path = '/'.join(file_path)
    #upload img
    a = u.writeFile('%s' % upload_path, data)
    print a
    #a = u.writeFile('/a/b/c/d/e/f/g/logo.jpg',data, True) 可自动创建父级目录(最多10级)
    #spice upyun current img url
    domin_url = DOMAIN_NAME.split()
    domin_url.append(upload_path)
    upyun_img_url = ''.join(domin_url)
    #
    if a:
        pro.avatar = upyun_img_url
        pro.save()
    #获取上传后的图片信息(仅图片空间有返回数据)
    print(u.getWritedFileInfo('x-upyun-width'))  # 图片宽度
    print(u.getWritedFileInfo('x-upyun-height'))  # 图片高度
    print(u.getWritedFileInfo('x-upyun-frames'))  # 图片帧数
    print(u.getWritedFileInfo('x-upyun-file-type'))  # 图片类型

    #获取文件信息
    print u.getFileInfo('/logo.jpg')

    #a = u.writeFile('/testd.jpg','sdfsdf')
    #print a
    #a = u.deleteFile('/testd.jpg')
    #print a
    a = u.readDir('/')
    if a:
        for i in a:
            print i.filename
    else:
        print a
Ejemplo n.º 35
0
# -*- coding: utf8 -*-
from upyun import UpYun,md5,md5file
import sys


if __name__ == '__main__':
    u = UpYun('空间名称', '操作员用户名', '操作员密码')
    
    #查看版本信息
    #print u.version()

    #设定api所调用的域名
    #u.setApiDomain('v0.api.upyun.com')

    #创建目录
    #a = u.mkDir('/testa')
    #print a
    #a = u.mkDir('/a/b/c', True) 可自动创建父级目录(最多10级)

    #显示目录下的文件
    #a = u.readDir('/test/')
    #for i in a:
    #    print i.filename
    
    #开启调试
    #u.debug = True

    data = open('aa.gif','rb')
    #设置待上传文件的 Content-MD5 值
    #如又拍云服务端收到的文件MD5值与用户设置的不一致,将回报 406 Not Acceptable 错误
    u.setContentMD5(md5file(data))
Ejemplo n.º 36
0
if __name__ == '__main__':

    UPCONFIG = {
        'bucket' : 'weizoo-img',
        'username' : '******',
        'password' : '******'
    }

    def md5(src):
        m1 = imd5.new()
        m1.update(src)
        dest1 = m1.hexdigest()
        return dest1
    sourceurl = 'http://img1.gtimg.com/3/350/35009/3500929_1200x1000_0.jpg'

    u = UpYun(UPCONFIG['bucket'], UPCONFIG['username'], UPCONFIG['password'])
    #按星期建立目录
    _dir = time.strftime('%y%U', time.localtime(time.time()))

    #获取文件后缀
    _r = re.compile('\.\w+$')
    filetype = _r.search(sourceurl).group()
    localfile = '/tmp/weizoo-img-tmp/' + int(time.time()) + filetype

    if not u.mkDir(_dir) :
        print '1'
    #img_file = urllib.urlopen(sourceurl, 'rb')
    os.popen('wget "' + sourceurl + '" -q -O ' + localfile)
    img_file = open(localfile, 'rb')
    bfile = img_file.read()
Ejemplo n.º 37
0
class Build(object):
    '''
    class docs
    '''
    
    def __init__(self, 
            space_name, 
            action_type, 
            input_data_dir, 
            output_data_dir,
            server_data_dir,
            action):
        '''
        init docs
        '''
        # Init.
        self.space_name = space_name
        self.input_data_dir = input_data_dir
        self.output_data_dir = output_data_dir
        self.server_data_dir = server_data_dir
        self.action = action
        
        if not os.path.exists(DATA_ORIGIN_DIR):
            create_directory(DATA_ORIGIN_DIR)

        self.data_origin_file = os.path.join(DATA_ORIGIN_DIR, "%s.tar.gz" % self.space_name)

        if action_type == BUILD_ORIGIN_DATA:
            self.build_origin_data(self.action[1])
        if action_type == BUILD_UPDATE_PATCH:
            self.build_update_patch(self.action[1])

    def check_permission(self, space_name):
        # Set upyun information.
        username = raw_input("Username: "******"/") <> None:
            return True
        else:
            print "验证失败..."
            return False
                
    def upload_file(self, 
                    local_file,
                    remote_file,
                    data_name):
        if self.server.getFileInfo(remote_file):
            print "%s: 删除远端%s..." % (self.space_name, data_name)
            self.server.deleteFile(remote_file)
            print "%s: 删除远端%s完成" % (self.space_name, data_name)
            
        print "%s: 上传远端%s..." % (self.space_name, data_name)    
        self.server.setContentMD5(md5_file(local_file))
        with open(local_file, "rb") as patch_list_file:
            if self.server.writeFile(remote_file, patch_list_file.read(), True):
                print "%s: 上传远端%s成功" % (self.space_name, data_name)    
            else:
                print "%s: 上传远端%s失败" % (self.space_name, data_name)    

    def delete_remote_file(self, remote_file, data_name):
        if self.server.getFileInfo(remote_file):
            print "%s: 删除远端%s..." % (self.space_name, data_name)
            self.server.deleteFile(remote_file)
            print "%s: 删除远端%s完成" % (self.space_name, data_name)
        else:
            print "%s: 远端不存在%s" % (self.space_name, data_name)
                
    def build_origin_data(self, action):
        if action == "build":
            # Delete origin data
            remove_file(self.data_origin_file)
            
            # Build origin data.
            print "%s: 创建本地原始数据..." % (self.space_name)
            with tarfile.open(self.data_origin_file, "w:gz") as tar:
                for root, dir, files in os.walk(self.input_data_dir):
                    for file in files:
                        fullpath=os.path.join(root, file)
                        tar.add(fullpath, fullpath.split(self.input_data_dir)[1], False)
            print "%s: 创建本地原始数据完成" % (self.space_name)
            with open(TIME_FLAG_FILE, 'w') as fp:
                s = get_current_time("%Y_%m_%d_%H:%M:%S")
                fp.write(s)

        if action == "upload" and self.check_permission(self.space_name):
            remote_origin_file_path = os.path.join(
                    self.server_data_dir, 
                    "origin", 
                    md5_file(self.data_origin_file), 
                    "%s.tar.gz" % self.space_name)
            self.upload_file(self.data_origin_file, remote_origin_file_path, "原始数据")
    
    def build_update_patch(self, action):
        if os.path.exists(self.data_origin_file):
            self.output_patch_dir = os.path.join(self.output_data_dir, "patch")
            if not os.path.exists(self.output_patch_dir):
                create_directory(self.output_patch_dir)

            self.output_temp_dir = os.path.join(self.output_data_dir, "temp")
            self.output_temp_file = os.path.join(self.output_temp_dir, "%s.tar.gz" % self.space_name)
            self.output_temp_patch_file = os.path.join(self.output_temp_dir, "patch")

            self.patch_md5_file = os.path.join(self.output_patch_dir, "patch_md5.json")
            self.origin_data_md5 = md5_file(self.data_origin_file)
            if not os.path.exists(self.patch_md5_file):
                self.patch_md5_json = {}
                self.patch_md5_json["origin_data"] = self.origin_data_md5
                self.patch_md5_json["current_patch"] = []
            else:
                self.patch_md5_json = json.load(open(self.patch_md5_file))

            if self.patch_md5_json["origin_data"] != self.origin_data_md5:
                self.patch_md5_json["origin_data"] = self.origin_data_md5
                self.patch_md5_json["current_patch"] = []

            self.remote_patch_dir = os.path.join(self.server_data_dir, "patch")

            if action == "build":
                # Delete temp directory first.
                create_directory(self.output_temp_dir, True)

                # Build temp file.
                print "%s: 创建本地更新数据..." % self.space_name    
                with tarfile.open(self.output_temp_file, "w:gz") as tar:
                    for root, dir, files in os.walk(self.input_data_dir):
                        for file in files:
                            fullpath=os.path.join(root, file)
                            tar.add(fullpath, fullpath.split(self.input_data_dir)[1], False)
                print "%s: 创建本地更新数据完成" % self.space_name    
                
                print "%s: 生成补丁文件..." % self.space_name    
                subprocess.Popen(
                    "xdelta3 -ves %s %s %s" % (
                        self.data_origin_file,
                        self.output_temp_file,
                        self.output_temp_patch_file),
                    shell=True).wait()
                
                newest_patch_file_md5 = md5_file(self.output_temp_patch_file)
                current_patch_dict = self.patch_md5_json.get("current_patch")
                if current_patch_dict:
                    last_patch_md5 = current_patch_dict[0]["md5"]
                    if last_patch_md5 == newest_patch_file_md5:
                        remove_directory(self.output_temp_dir)
                        print "%s: input_data数据未做任何改变,删除相同补丁文件" % self.space_name
                        sys.exit(0)
                else:
                    current_patch_dict = []
                newest_patch_dir = os.path.join(self.output_patch_dir, self.origin_data_md5)
                if not os.path.exists(newest_patch_dir):
                    create_directory(newest_patch_dir)

                newest_patch_name = "%s-%s.xd3" % (self.space_name, get_current_time("%Y_%m_%d_%H:%M:%S"))
                newest_patch_file = os.path.join(newest_patch_dir, newest_patch_name)

                os.renames(self.output_temp_patch_file, newest_patch_file)
                remove_directory(self.output_temp_dir)
                current_patch_dict.insert(0, {"name" : newest_patch_name, "md5" : newest_patch_file_md5})
                print "%s: 生成补丁文件完成" % self.space_name    
                
                print "%s: 写入补丁md5..." % self.space_name
                self.patch_md5_json["current_patch"] = current_patch_dict
                with open(self.patch_md5_file, "w") as fp:
                    json.dump(self.patch_md5_json, fp)
                print "%s: 写入补丁md5完成" % self.space_name
                
            elif action == "upload" and self.check_permission(self.space_name):
                # Upload patch file.
                current_patch_dict = self.patch_md5_json.get("current_patch")
                if current_patch_dict != []:
                    if len(current_patch_dict) > 2:
                        print "%s: 清理多余的补丁" % self.space_name
                        spare_patchs = current_patch_dict[2:]
                        current_patch_dict = current_patch_dict[:2]
                        for patch in spare_patchs:
                            patch_name = patch["name"].encode("utf-8")
                            local_path = os.path.join(self.output_patch_dir, self.origin_data_md5, patch_name)
                            try:
                                remove_file(local_path)
                                print "%s: 清除了补丁%s" % (self.space_name, patch_name)
                            except:
                                pass
                            remote_path = os.path.join(self.remote_patch_dir, self.origin_data_md5, patch_name)
                            self.delete_remote_file(remote_path, patch_name)
                        self.patch_md5_json["current_patch"] = current_patch_dict
                        with open(self.patch_md5_file, "w") as fp:
                            json.dump(self.patch_md5_json, fp)

                    newest_patch_name = current_patch_dict[0]["name"].encode("utf-8")
                    newest_patch_file = os.path.join(self.output_patch_dir, self.origin_data_md5, newest_patch_name)
                    remote_patch_file = os.path.join(self.remote_patch_dir, self.origin_data_md5, newest_patch_name)
                    remote_patch_md5_file = os.path.join(self.remote_patch_dir, self.origin_data_md5, "patch_md5.json")

                    # upload newest_patch_file
                    self.upload_file(newest_patch_file, remote_patch_file, "补丁更新数据")

                    # Update patch list file.
                    self.upload_file(self.patch_md5_file, remote_patch_md5_file, "补丁md5列表文件")
                else:
                    print "%s: 当前没有任何补丁,请打好补丁再上传吧!" % self.space_name
        else:
            print "%s: %s 不存在, 无法进行补丁的创建和上传" % (self.space_name, self.data_origin_file)
Ejemplo n.º 38
0
class UpYunTestCase(unittest.TestCase):
    #: File type bucket
    BUCKET_FILE = ''

    #: Image type bucket
    BUCKET_IMAGE = ''

    #: Username
    USERNAME = ''

    #: Password
    PASSWD = ''

    #: Predefined thumbnail version
    THUMB_VERSION = ''

    ASSET = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'asset')
    LOCAL_PATH_TXT_FILE = os.path.join(ASSET, 'upyun-test.txt')
    LOCAL_PATH_IMG_FILE = os.path.join(ASSET, 'upyun-test.gif')
    REMOTE_DIR = '/tmp/upyun-test'
    REMOTE_PATH_TXT_FILE = pathname2url(
            os.path.join(REMOTE_DIR, 'upyun-test.txt'))
    REMOTE_PATH_IMG_FILE = pathname2url(
            os.path.join(REMOTE_DIR, 'upyun-test.gif'))

    def setUp(self):
        self.client_file = UpYun(self.BUCKET_FILE,
                (self.USERNAME, self.PASSWD), const.SPACE_TYPE_FILE)
        self.client_image = UpYun(self.BUCKET_IMAGE,
                (self.USERNAME, self.PASSWD), const.SPACE_TYPE_IMAGE)
        self.test_file_txt = open(self.LOCAL_PATH_TXT_FILE)
        self.test_file_img = open(self.LOCAL_PATH_IMG_FILE, 'rb')

    def tearDown(self):
        self.test_file_txt.close()
        self.test_file_img.close()
        self._delete(self.REMOTE_PATH_TXT_FILE, self.client_file)
        self._delete(self.REMOTE_PATH_IMG_FILE, self.client_file)
        self._delete(self.REMOTE_PATH_IMG_FILE, self.client_image)
        self._delete(self.REMOTE_DIR, self.client_image)
        self._delete(self.REMOTE_DIR, self.client_file)

    def _put_file(self):
        return self.client_file.put(
                self.REMOTE_PATH_TXT_FILE, self.test_file_txt)

    def _put_image(self, client=None):
        client = client or self.client_image
        return client.put(self.REMOTE_PATH_IMG_FILE, self.test_file_img)

    def _mkdir(self, mk_parent=True, client=None):
        client = client or self.client_file
        return client.mkdir(self.REMOTE_DIR, mk_parent)

    def _delete(self, path, client):
        return client.delete(path)

    def test_put_file_space_file(self):
        resp = self._put_file()
        assert resp.success, resp.error

    def test_put_file_space_image(self):
        resp = self._put_image(self.client_file)
        assert resp.success, resp.error

    def test_put_image_space_image(self):
        resp = self._put_image(self.client_image)
        assert resp.success, resp.error
        assert isinstance(resp.frames, int)
        assert isinstance(resp.height, int)
        assert resp.height > 0
        assert isinstance(resp.width, int)
        assert resp.width > 0

    def test_put_thumbnail_version(self):
        resp = self.client_image.put_thumbnail(self.REMOTE_PATH_IMG_FILE,
                self.test_file_img, self.THUMB_VERSION)
        assert resp.success, resp.error

    def test_put_thumbnail_version_modified(self):
        resp = self.client_image.put_thumbnail(self.REMOTE_PATH_IMG_FILE,
                self.test_file_img, self.THUMB_VERSION,
                const.THUMB_TYPE_FIX_MAX, (10,), 100, True)
        assert resp.success, resp.error

    def test_put_thumbnail_custom(self):
        resp = self.client_image.put_thumbnail(self.REMOTE_PATH_IMG_FILE,
                self.test_file_img, ttype=const.THUMB_TYPE_FIX_MAX, res=(10,),
                quality=100, sharpen=True)
        assert resp.success, resp.error

    def test_get_text_file(self):
        self._put_file()
        resp = self.client_file.get(self.REMOTE_PATH_TXT_FILE)
        assert resp.success, resp.error
        self.test_file_txt.seek(0)
        assert resp.data == self.test_file_txt.read()

    def test_get_binary_file(self):
        client = self.client_image
        self._put_image(client)
        resp = client.get(self.REMOTE_PATH_IMG_FILE)
        assert resp.success, resp.error
        self.test_file_img.seek(0)
        assert resp.data == self.test_file_img.read()

    def test_ls(self):
        client = self.client_file
        self._put_file()
        self._put_image(client)
        resp = client.ls(self.REMOTE_DIR)
        assert resp.success, resp.error
        remote_file_paths = map(lambda f: f.path, resp.files.itervalues())
        assert self.REMOTE_PATH_TXT_FILE in remote_file_paths
        assert self.REMOTE_PATH_IMG_FILE in remote_file_paths

    def test_mkdir(self):
        resp = self._mkdir()
        assert resp.success, resp.error

    def test_usage(self):
        resp = self.client_file.usage()
        assert resp.success, resp.error
        assert isinstance(resp.usage, int)
        resp = self.client_image.usage()
        assert resp.success, resp.error
        assert isinstance(resp.usage, int)

    def test_info(self):
        def _assert(resp):
            assert resp.success, resp.error
            assert isinstance(resp.size, int)
            assert isinstance(resp.date, datetime.datetime)
            assert resp.type == const.FILE_TYPE_FILE

        self._put_file()
        resp = self.client_file.info(self.REMOTE_PATH_TXT_FILE)
        _assert(resp)
        self._put_image()
        resp = self.client_image.info(self.REMOTE_PATH_IMG_FILE)
        _assert(resp)

    def test_delete(self):
        self._put_file()
        resp = self.client_file.delete(self.REMOTE_PATH_TXT_FILE)
        assert resp.success, resp.error
        self._put_image()
        resp = self.client_image.delete(self.REMOTE_PATH_IMG_FILE)
        assert resp.success, resp.error
Ejemplo n.º 39
0
    def post(self):
        errors = []
        username = str(self.get_cookie('username', ''))
        userflag = str(self.get_cookie('userflag', ''))
        if not username or not userflag:
            self.write('403')
            return
        myfile = self.request.files.get('myfile', [0])[0]
        if myfile:
            im = Image.open(StringIO(myfile['body']))
            max_w = 73
            max_h = 73
            if im.size[0] > max_w or im.size[1] > max_w:
                ss = max(float(im.size[0]) / max_w, float(im.size[1]) / max_h)
                im = im.resize((int(im.size[0] / ss), int(im.size[1] / ss)),
                               Image.ANTIALIAS)

            output = StringIO()
            im.convert('RGB').save(output, 'JPEG', quality=95)  #95
            img_data = output.getvalue()
            output.close()

            #self.set_header('Content-Type','image/jpeg')
            #self.write(img_data)
            #return

            if IMG_STORAGE == 'sae':
                file_path_name = '%s.jpg' % username
                avatar = put_obj2storage(file_name=file_path_name,
                                         data=img_data,
                                         domain_name=DOMAIN_NAME_AVATAR)
            elif IMG_STORAGE == 'upyun':
                u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER, UPYUN_PW)
                file_path_name = '/avatar/%s.jpg' % username
                avatar = u.writeFile(file_path_name, img_data, True)

            if avatar:
                if username == 'admin':
                    Member.set_flag(username, '99')
                if userflag == '1':
                    if Member.set_flag(username, '2'):
                        self.set_cookie('userflag',
                                        '2',
                                        path="/",
                                        expires_days=365)
                        clear_cache_multi(['cur_user:'******'/setavatar')
                        return
                    else:
                        errors.append('服务器暂时出错,请稍后再试')
                else:
                    self.redirect('/setavatar')
                    return
            else:
                errors.append('保存图片出错,请稍后再试')
        else:
            errors.append('图片没有正确上传')

        self.echo('setavatar.html', {
            'title': "设置头像",
            'errors': errors,
            'wb_avatar_large': '',
        },
                  layout='_layout.html')
Ejemplo n.º 40
0
    def get(self):
        #尝试读取QQ空间头像
        wb_avatar_large = ''
        qq = self.get_argument('qq', '')
        if qq == '1':
            username = str(self.get_cookie('username', ''))
            open_id = str(self.get_cookie('open_id', ''))
            access_token = str(self.get_cookie('access_token', ''))
            userflag = str(self.get_cookie('userflag', ''))
            if username and open_id and access_token and userflag:
                qq_user = qqclient.get_user_info(access_token, open_id)
                #qq_user { "ret":0, "msg":"", "nickname":"qq nicke name", "figureurl_2":"http://qzapp.qlogo.cn/qzapp/100254539/5BDCA5E6321B273E44720E532B1379ED/100" }
                #保存有用的信息
                #id = str(open_id)
                #name = en_code(qq_user['nickname'])
                wb_avatar_large = str(qq_user.get('figureurl_2', ''))

                headers = {
                    'User-Agent':
                    'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',
                    'Referer': wb_avatar_large,
                }
                req = urllib2.Request(url=wb_avatar_large, headers=headers)
                data = urllib2.urlopen(req).read()
                if data:
                    im = Image.open(StringIO(data))
                    if im.size[0] > 73 or im.size[1] > 73:
                        ss = max(
                            float(im.size[0]) / 73,
                            float(im.size[1]) / 73)
                        box = (int(im.size[0] / ss), int(im.size[1] / ss))
                        im = im.resize(box, Image.ANTIALIAS)
                        output = StringIO()
                        im.convert('RGB').save(output, 'JPEG', quality=95)  #95
                        img_data = output.getvalue()
                        output.close()

                    else:
                        img_data = data

                    if IMG_STORAGE == 'sae':
                        file_path_name = '%s.jpg' % username
                        avatar = put_obj2storage(
                            file_name=file_path_name,
                            data=img_data,
                            domain_name=DOMAIN_NAME_AVATAR)
                    elif IMG_STORAGE == 'upyun':
                        u = UpYun(DOMAIN_NAME_AVATAR, UPYUN_USER, UPYUN_PW)
                        file_path_name = '/avatar/%s.jpg' % username
                        avatar = u.writeFile(file_path_name, img_data, True)

                    if avatar:
                        if userflag == '1':
                            if Member.set_flag(username, '2'):
                                self.set_cookie('userflag',
                                                '2',
                                                path="/",
                                                expires_days=365)
                                clear_cache_multi(['cur_user:'******'/')
                                #return

        self.echo('setavatar.html', {
            'title': "设置头像",
            'errors': [],
            'newest_node': Node.get_newest(),
            'wb_avatar_large': wb_avatar_large,
        },
                  layout='_layout.html')
Ejemplo n.º 41
0
    UPCONFIG = {
        'bucket': 'weizoo-img',
        'username': '******',
        'password': '******'
    }

    def md5(src):
        m1 = imd5.new()
        m1.update(src)
        dest1 = m1.hexdigest()
        return dest1

    sourceurl = 'http://img1.gtimg.com/3/350/35009/3500929_1200x1000_0.jpg'

    u = UpYun(UPCONFIG['bucket'], UPCONFIG['username'], UPCONFIG['password'])
    #按星期建立目录
    _dir = time.strftime('%y%U', time.localtime(time.time()))

    #获取文件后缀
    _r = re.compile('\.\w+$')
    filetype = _r.search(sourceurl).group()
    localfile = '/tmp/weizoo-img-tmp/' + int(time.time()) + filetype

    if not u.mkDir(_dir):
        print '1'
    #img_file = urllib.urlopen(sourceurl, 'rb')
    os.popen('wget "' + sourceurl + '" -q -O ' + localfile)
    img_file = open(localfile, 'rb')
    bfile = img_file.read()
Ejemplo n.º 42
0
    UPCONFIG = {
        'bucket' : 'weizoo-img',
        'username' : 'work',
        'password' : '******'
    }

    def md5(src):
        m1 = imd5.new()
        m1.update(src)
        dest1 = m1.hexdigest() 
        return dest1

    sourceurl = 'http://www.google.com/images/nav_logo102.png'

    u = UpYun(UPCONFIG['bucket'], UPCONFIG['username'], UPCONFIG['password'])
    #按星期建立目录
    _dir = time.strftime('%y_%U', time.localtime(time.time()))

    if not (fdir = u.readDir(_dir)) :
        fdir = u.mkDir(_dir)
    if not fdir :
        return False

    img_file = urllib.urlopen(sourceurl, 'rb')
    bfile = img_file.read()
    #获取文件后缀
    _r = re.compile('\.\w+$')
    filetype = _r.search(sourceurl).group()
    #源文件md5之后取前16位作为文件名
    filename = md5(bfile)[0:16]
Ejemplo n.º 43
0
 def __init__(self, uri):
     assert uri.startswith('http://')
     self.upyun = UpYun(self.APP_NAME, self.USERNAME, self.PASSWORD)
     self.prefix = '/' + uri.split('/')[-1]
Ejemplo n.º 44
0
# -*- coding: utf8 -*-
from upyun import UpYun,md5,md5file
import sys

if __name__ == '__main__':
    u = UpYun('空间名称','操作员用户名','操作员密码')
    
    #查看版本信息
    print u.version()

    #设定api所调用的域名
    u.setApiDomain('v0.api.upyun.com')

    #创建目录
    a = u.mkDir('/testa')
    print a
    a = u.mkDir('/a/b/c', True) 可自动创建父级目录(最多10级)

    #显示目录下的文件
    a = u.readDir('/test/')
    for i in a:
        print i.filename
    
    #开启调试
    u.debug = True

    data = open('aa.gif','rb')
    #设置待上传文件的 Content-MD5 值
    #如又拍云服务端收到的文件MD5值与用户设置的不一致,将回报 406 Not Acceptable 错误
    u.setContentMD5(md5file(data))