예제 #1
0
    def post(self):
        if (not self.request.files) or (not 'imgFile' in self.request.files):
            return self.write(json_dumps({'error': 1, 'message': u'请选择文件'}))

        img_file = self.request.files['imgFile'][0]
        o_filename = img_file['filename']

        # 选择上传根目录
        root = self.get_argument('root', '')
        if root:
            upload_root = options['upload_img_path_%s' % root]
        else:
            upload_root = options.upload_img_path

        # 生成文件名
        random_id = int(datetime.now().strftime('%Y%m%d%H%M%S%f')[:19])
        random_id += random.randint(0, 99)
        extension = os.path.splitext(o_filename)[1]
        file_name = '%s%s' % (random_id, extension)

        # 算出目录
        first_dir = random_id >> 20
        second_dir = (~(first_dir << 10)) & (random_id >> 10)
        third_dir = (~((random_id >> 10) << 10)) & random_id
        first_dir %= 1000

        three_level_path = os.path.join(str(first_dir), str(second_dir),
                                        str(third_dir))
        file_dir = os.path.join(upload_root, three_level_path)

        # 如果目录不存在,创建之
        if not os.path.exists(file_dir):
            try:
                os.makedirs(file_dir)
            except OSError:
                return self.write(
                    json_dumps({
                        'error': 1,
                        'message': u'创建目录失败'
                    }))

        # 保存文件
        try:
            with open(os.path.join(file_dir, file_name), 'w') as f:
                f.write(img_file['body'])
        except IOError:
            return self.write(json_dumps({'error': 1, 'message': u'保存文件失败'}))

        # 文件名上加认证信息、水印信息
        masks = ['nw']
        if self.get_argument('source', ''):
            masks.append(self.get_argument('source'))

        if root == 'contract':
            url = contract_url(os.path.join('/', three_level_path, file_name))
        else:
            url = img_url(os.path.join('/', three_level_path, file_name),
                          *masks)
        self.write(json_dumps({'error': 0, 'url': url}))
예제 #2
0
def generate_img_url(images):
    """把数据库的图片名如:/27/610/148/231323.jpg
    转化成URL如:http://.../contract/o/27/610/148/231323.jpg"""
    image_urls = []
    image_list = images.split(',')
    for image in image_list:
        image_urls.append(contract_url(image))
    return image_urls
예제 #3
0
def generate_img_url(images):
    """把数据库的图片名如:/27/610/148/231323.jpg
    转化成URL如:http://.../contract/o/27/610/148/231323.jpg"""
    image_urls = []
    image_list = images.split(',')
    for image in image_list:
        image_urls.append(contract_url(image))
    return image_urls
예제 #4
0
    def post(self):
        if (not self.request.files) or (not 'imgFile' in self.request.files):
            return self.write(json_dumps({'error': 1, 'message': u'请选择文件'}))

        img_file = self.request.files['imgFile'][0]
        o_filename = img_file['filename']

        # 选择上传根目录
        root = self.get_argument('root', '')
        if root:
            upload_root = options['upload_img_path_%s' % root]
        else:
            upload_root = options.upload_img_path

        # 生成文件名
        random_id = int(datetime.now().strftime('%Y%m%d%H%M%S%f')[:19])
        random_id += random.randint(0, 99)
        extension = os.path.splitext(o_filename)[1]
        file_name = '%s%s' % (random_id, extension)

        # 算出目录
        first_dir = random_id >> 20
        second_dir = (~(first_dir << 10)) & (random_id >> 10)
        third_dir = (~((random_id >> 10) << 10)) & random_id
        first_dir %= 1000

        three_level_path = os.path.join(str(first_dir), str(second_dir), str(third_dir))
        file_dir = os.path.join(upload_root, three_level_path)

        # 如果目录不存在,创建之
        if not os.path.exists(file_dir):
            try:
                os.makedirs(file_dir)
            except OSError:
                return self.write(json_dumps({'error': 1, 'message': u'创建目录失败'}))

        # 保存文件
        try:
            with open(os.path.join(file_dir, file_name), 'w') as f:
                f.write(img_file['body'])
        except IOError:
            return self.write(json_dumps({'error': 1, 'message': u'保存文件失败'}))

        # 文件名上加认证信息、水印信息
        masks = ['nw']
        if self.get_argument('source', ''):
            masks.append(self.get_argument('source'))

        if root == 'contract':
            url = contract_url(os.path.join('/', three_level_path, file_name))
        else:
            url = img_url(os.path.join('/', three_level_path, file_name), *masks)
        self.write(json_dumps({'error': 0, 'url': url}))