rabin před 2 měsíci
rodič
revize
a9d5e340bb

+ 1 - 1
conf/dev.conf

@@ -58,7 +58,7 @@ xsrf_cookies        = True
 
 ;前台配置
 [front]
-port				= 8089
+port				= 8088
 debug				= True
 ;请求的buffersize
 max_buffer_size		= 210763776

+ 8 - 5
front/api/main.py

@@ -2,7 +2,7 @@
 from .__load__ import *
 
 # 请求处理 /main/loader 接口必须后端获取,token不允许暴露
-#http://192.168.33.10:8088/main/loader?signature=44e3cd684a9fe697792a235c8c57838211f5823a&appid=mo1209&nonce=1529659172&method=extract&site_id=1&uid=1&source_id=1&source=
+#http://192.168.33.10:8088/main/loader?signature=44e3cd684a9fe697792a235c8c57838211f5823a&appid=mo1209&nonce=1529659172&timestamp=123&method=extract&site_id=1&uid=1&source_id=1&source=
 class loader_path(Base):
 	@Web.setting
 	def get(self):
@@ -11,14 +11,17 @@ class loader_path(Base):
 			'extract': ['parser', 'extract']
 		}
 		method = self.input('method')
-		param = self.request.arguments
+		param = self.inputAll()
 		if method in config:
 			site = Demeter.service('auth').init(param)
 			if isinstance(site, str):
-				self.out('no', site)
+				self.out(site)
 			else:
 				method = config[method]
+				param['site_id'] = site['id']
 				param['sync'] = False
-				Demeter.service('loader').get(obj=method[0], module=method[1], **param)
+				param['host'] = self.host()
+				result = Demeter.service('loader').get(obj=method[0], module=method[1], **param)
+				self.out('yes', {'data': result})
 		else:
-			self.out('no', 'method error')
+			self.out('method error')

+ 1 - 0
model/extract.py

@@ -17,6 +17,7 @@ class Extract(Model):
     ext = Fields(type='varchar(20)', comment='后缀名')
     size = Fields(type='varchar(200)', comment='源文件大小')
 
+    host = Fields(type='varchar(200)', comment='远程主机地址')
     file = Fields(type='varchar(200)', comment='本地地址')
     path = Fields(type='varchar(200)', comment='本地资源目录')
 

+ 3 - 1
service/auth.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from .__load__ import *
 class Auth(object):
-    def init(self, param=param, request=False):
+    def init(self, param={}, request=False):
         if 'appid' not in param:
             return '参数错误:appid'
         if 'timestamp' not in param:
@@ -14,6 +14,7 @@ class Auth(object):
         model = Demeter.model('site')
         model.appid = param['appid']
         site = model.select(type='fetchone')
+        return site
         if not site:
             return '站点信息不存在'
 
@@ -48,6 +49,7 @@ class Auth(object):
         return host
 
     def signature(self, param):
+        all_params = {}
         for k, v in param.items():
             all_params[k] = str(v)
         sorted_items = sorted(all_params.items(), key=lambda x: x[0])

+ 1 - 1
service/callback.py

@@ -15,5 +15,5 @@ class Callback(object):
             param['appsecret'] = site['appsecret']
             param['timestamp'] = Demeter.time()
             param['nonce'] = Demeter.hash()
-            param['signature'] = Dever.service('auth').signature(param)
+            param['signature'] = Demeter.service('auth').signature(param)
             Demeter.curl(api, param, 'post')

+ 5 - 3
service/extract/docs/pdf.py

@@ -54,15 +54,17 @@ class Pdf(Base):
                     except Exception:
                         pass
                     image_ext = "png"
-                    filename = f"{self.param['path']}page{page_num+1}_img_{i}.{image_ext}"
-                    with open(filename, "wb") as f:
+                    file = f"{self.param['path']}page{page_num+1}_img_{i}.{image_ext}"
+                    with open(file, "wb") as f:
                         f.write(image_bytes)
 
+                    if 'host' in self.param and self.param['host']:
+                        file = file.replace(Demeter.path + 'runtime/', self.param['host'])
                     page_items.append({
                         "type": "image",
                         "pos": b["bbox"],
                         "ext": image_ext,
-                        "filename": filename,
+                        "file": file,
                         "page": page_num + 1,
                     })
 

+ 13 - 10
service/extract/parser.py

@@ -3,7 +3,7 @@ from .__load__ import *
 # 提取器
 class Parser(object):
 
-    def get(self, id=0, site_id = 0, uid = 0, source_id = 0, source = '', notify='', sync=True, method='json'):
+    def get(self, host = '', id=0, site_id = 0, uid = 0, source_id = 0, source = '', notify='', sync=True, method='json', **kwargs):
         extract = Demeter.model('extract')
         if int(id) > 0:
             extract.id = id
@@ -12,8 +12,8 @@ class Parser(object):
         data = extract.select(type='fetchone')
         if not data:
             if not source:
-                return source
-            info = self.getFile(site_id, source)
+                return 'error'
+            info = self.getFile(site_id, source, host)
             info['uid'] = uid
             info['source_id'] = source_id
             info['notify'] = notify
@@ -25,7 +25,7 @@ class Parser(object):
             return self.handle(info, method);
         return info['id']
 
-    def getFile(self, site_id, file):
+    def getFile(self, site_id, file, host):
         info = {}
         (filepath,temp) = os.path.split(file)
         (filename,extension) = os.path.splitext(temp)
@@ -34,6 +34,7 @@ class Parser(object):
         info['key'] = self.getKey(site_id, file)
         info['ext'] = extension
         info['name'] = filename
+        info['host'] = host;
         info['file'] = file
         info['path'] = filepath
         info = self.getLocal(info)
@@ -45,21 +46,23 @@ class Parser(object):
 
     def getLocal(self, info):
         if 'http' in info['source']:
+            # 远程的
             day = str(date.today())
             day = day.split('-')
-            filename =  info['key']
+            filename = info['key']
             filepath = str(info['site_id']) + '/' + day[0] + '/' + day[1] + '/' + day[2]
+            filepath = File.mkdirs(os.path.join(Demeter.path, 'runtime','files', filepath))
         else:
+            # 本地的
             filename = info['name']
             filepath = info['path']
+            info['host'] = ''
 
-        if 'save' in Demeter.config['setting']:
-            filepath = File.mkdirs(os.path.join(Demeter.config['setting']['save'], filepath)) + '/' + filename
-        else:
-            filepath = File.mkdirs(os.path.join(Demeter.path, 'runtime','files', filepath)) + '/' + filename
+        filepath = File.mkdirs(filepath) + '/' + filename
 
         info['file'] = filepath + info['ext']
         info['path'] = filepath + '/'
+
         if File.exists(info['file']):
             return info
         else:
@@ -100,7 +103,7 @@ class Parser(object):
                 self.download(info['source'], info['file'])
             if True:
                 File.mkdir(info['path'])
-                obj = Demeter.service('loader', 'extract').get(info['file'], {'path':info['path']})
+                obj = Demeter.service('loader', 'extract').get(info['file'], {'path':info['path'], 'host':info['host']})
                 func = getattr(obj, method)
                 result = func()
                 if result and 'page' in result and result['page'] > 0:

+ 1 - 1
service/loader.py

@@ -15,7 +15,7 @@ class Loader(object):
             config = Demeter.config['redis']
             content = obj + '|' + module + '|' + str(id) 
             redis.rpush(config['name'], content)
-            return content
+            return id
 
     # 启动任务
     def start(self):