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}))
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
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}))