Surplus_Up (2DU) 6 лет назад
Родитель
Сommit
3d455a4a76
3 измененных файлов с 76 добавлено и 64 удалено
  1. 69 61
      route/func_upload.py
  2. 6 2
      route/tool/func.py
  3. 1 1
      version.json

+ 69 - 61
route/func_upload.py

@@ -12,85 +12,93 @@ def func_upload_2(conn):
         else:
             captcha_post('', 0)
 
-        data = flask.request.files.get('f_data', None)
-        if not data:
+        file_data = flask.request.files.getlist("f_data[]", None)
+        if not file_data:
             return re_error('/error/9')
 
-        if int(wiki_set(3)) * 1024 * 1024 < flask.request.content_length:
-            return re_error('/error/17')
+        if len(file_data) == 1:
+            file_num = None
+        else:
+            file_num = 1
 
-        value = os.path.splitext(data.filename)[1]
-        
-        curs.execute(db_change("select html from html_filter where kind = 'extension'"))
-        extension = [i[0].lower() for i in curs.fetchall()]
-        if not re.sub('^\.', '', value).lower() in extension:
-            return re_error('/error/14')
+        for data in file_data:
+            if int(wiki_set(3)) * 1024 * 1024 < flask.request.content_length:
+                return re_error('/error/17')
 
-        if flask.request.form.get('f_name', None):
-            name = flask.request.form.get('f_name', None) + value
-        else:
-            name = data.filename
+            value = os.path.splitext(data.filename)[1]
+            
+            curs.execute(db_change("select html from html_filter where kind = 'extension'"))
+            extension = [i[0].lower() for i in curs.fetchall()]
+            if not re.sub('^\.', '', value).lower() in extension:
+                return re_error('/error/14')
 
-        piece = os.path.splitext(name)
-        if re.search('[^ㄱ-힣0-9a-zA-Z_\- ]', piece[0]):
-            return re_error('/error/22')
+            if flask.request.form.get('f_name', None):
+                name = flask.request.form.get('f_name', None) + (' ' + str(file_num) if file_num else '') + value
+            else:
+                name = data.filename
 
-        e_data = sha224_replace(piece[0]) + piece[1]
+            piece = os.path.splitext(name)
+            if re.search('[^ㄱ-힣0-9a-zA-Z_\- ]', piece[0]):
+                return re_error('/error/22')
 
-        curs.execute(db_change("select title from data where title = ?"), ['file:' + name])
-        if curs.fetchall():
-            return re_error('/error/16')
+            e_data = sha224_replace(piece[0]) + piece[1]
 
-        curs.execute(db_change("select html from html_filter where kind = 'file'"))
-        db_data = curs.fetchall()
-        for i in db_data:
-            t_re = re.compile(i[0])
-            if t_re.search(name):
-                return redirect('/file_filter')
+            curs.execute(db_change("select title from data where title = ?"), ['file:' + name])
+            if curs.fetchall():
+                return re_error('/error/16')
 
-        ip = ip_check()
+            curs.execute(db_change("select html from html_filter where kind = 'file'"))
+            db_data = curs.fetchall()
+            for i in db_data:
+                t_re = re.compile(i[0])
+                if t_re.search(name):
+                    return redirect('/file_filter')
 
-        if flask.request.form.get('f_lice_sel', 'direct_input') == 'direct_input':
-            lice = flask.request.form.get('f_lice', None) + '[br][br]'
-            if ip_or_user(ip) != 0:
-                lice += ip
+            ip = ip_check()
+
+            if flask.request.form.get('f_lice_sel', 'direct_input') == 'direct_input':
+                lice = flask.request.form.get('f_lice', '') + '[br][br]'
+                if ip_or_user(ip) != 0:
+                    lice += ip
+                else:
+                    lice += '[[user:' + ip + ']]'
+
+                lice += '[[category:direct_input]]'
             else:
-                lice += '[[user:' + ip + ']]'
+                lice = flask.request.form.get('f_lice_sel', '')
+                lice += '[br][br]'  + flask.request.form.get('f_lice', '')
+                lice += '[[category:' + re.sub('\]', '_', flask.request.form.get('f_lice_sel', '')) + ']]'
 
-            lice += '[[category:direct_input]]'
-        else:
-            lice = flask.request.form.get('f_lice_sel', None)
-            lice += '[br][br]'  + flask.request.form.get('f_lice', None)
-            lice += '[[category:' + re.sub('\]', '_', flask.request.form.get('f_lice_sel', None)) + ']]'
+            if os.path.exists(os.path.join(app_var['path_data_image'], e_data)):
 
-        if os.path.exists(os.path.join(app_var['path_data_image'], e_data)):
+                os.remove(os.path.join(app_var['path_data_image'], e_data))
 
-            os.remove(os.path.join(app_var['path_data_image'], e_data))
+                data.save(os.path.join(app_var['path_data_image'], e_data))
+            else:
+                data.save(os.path.join(app_var['path_data_image'], e_data))
 
-            data.save(os.path.join(app_var['path_data_image'], e_data))
-        else:
-            data.save(os.path.join(app_var['path_data_image'], e_data))
+            file_d = '[[file:' + name + ']][br][br]{{{[[file:' + name + ']]}}}[br][br]' + lice
 
-        file_d = '[[file:' + name + ']][br][br]{{{[[file:' + name + ']]}}}[br][br]' + lice
+            curs.execute(db_change("insert into data (title, data) values (?, ?)"), ['file:' + name, file_d])
+            curs.execute(db_change("insert into acl (title, decu, dis, why, view) values (?, 'admin', '', '', '')"), ['file:' + name])
 
-        curs.execute(db_change("insert into data (title, data) values (?, ?)"), ['file:' + name, file_d])
-        curs.execute(db_change("insert into acl (title, decu, dis, why, view) values (?, 'admin', '', '', '')"), ['file:' + name])
+            render_set(
+                title = 'file:' + name,
+                data = file_d,
+                num = 1
+            )
 
-        render_set(
-            title = 'file:' + name,
-            data = file_d,
-            num = 1
-        )
+            history_plus(
+                'file:' + name,
+                file_d,
+                get_time(),
+                ip,
+                ip,
+                '0',
+                'upload'
+            )
 
-        history_plus(
-            'file:' + name,
-            file_d,
-            get_time(),
-            ip,
-            ip,
-            '0',
-            'upload'
-        )
+            file_num += 1
 
         conn.commit()
 
@@ -115,7 +123,7 @@ def func_upload_2(conn):
                 ''' + load_lang('max_file_size') + ''' : ''' + wiki_set(3) + '''MB
                 <hr class=\"main_hr\">
                 <form method="post" enctype="multipart/form-data" accept-charset="utf8">
-                    <input type="file" name="f_data">
+                    <input multiple="multiple" type="file" name="f_data[]">
                     <hr class=\"main_hr\">
                     <input placeholder="''' + load_lang('file_name') + '''" name="f_name" value="''' + flask.request.args.get('name', '') + '''">
                     <hr class=\"main_hr\">

+ 6 - 2
route/tool/func.py

@@ -805,8 +805,12 @@ def acl_check(name = 'test', tool = '', topic_num = '1'):
     ip = ip_check()
     get_ban = ban_check()
     
-    acl_c = re.search("^user:((?:(?!\/).)*)", name)
-    if tool == '' and name and acl_c:
+    if name:
+        acl_c = re.search("^user:((?:(?!\/).)*)", name)
+    else:
+        acl_c = None
+
+    if tool == '' and acl_c:
         acl_n = acl_c.groups()
 
         if get_ban == 1:

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "master" : {
-        "r_ver" : "v3.1.7-master-16",
+        "r_ver" : "v3.1.7-master-17",
         "c_ver" : "3171600",
         "s_ver" : "7"
     }, "stable" : {