Răsfoiți Sursa

파일 올리기 추가

ect (or 2du) 8 ani în urmă
părinte
comite
0cb9ae5fda
4 a modificat fișierele cu 71 adăugiri și 10 ștergeri
  1. 67 8
      app.py
  2. 1 1
      update_mysql.py
  3. 2 1
      version.md
  4. 1 0
      views/index.tpl

+ 67 - 8
app.py

@@ -44,7 +44,7 @@ def redirect(data):
     
 from func import *
 
-r_ver = '2.3.1'
+r_ver = '2.3.2'
 p_ver = ''
 
 try:
@@ -1485,6 +1485,7 @@ def other():
                                 ' * [[wiki:admin_list|관리자 목록]]\r\n' + \
                                 ' * [[wiki:give_log|권한 목록]]\r\n' + \
                                 ' * [[wiki:manager/1|관리자 메뉴]]\r\n' + \
+                                ' * [[wiki:upload|파일 올리기]]\r\n' + \
                                 '== 버전 ==\r\n' + \
                                 '이 오픈나무는 [[https://github.com/2DU/openNAMU/blob/SQLite/version.md|' + r_ver + p_ver + ']]판 입니다.', 0, 0),
             menu = 0
@@ -2924,21 +2925,76 @@ def user_topic_list(name = None, num = 1):
         )
     )
     
-@route('/upload')
+@route('/upload', method=['GET', 'POST'])
 def upload():
-    ip = ip_check()
-    if(ban_check() == 0):
+    if(ban_check() == 1):
         return(redirect('/ban'))
     
     if(request.method == 'POST'):
-        pass
+        data = request.files.f_data
+        if(data):
+            if(int(wiki_set(4)) * 1024 * 1024 < request.content_length):
+                return redirect('/error/17')
+            
+            value = os.path.splitext(data.filename)[1]
+            if(not value in ['.jpeg', '.jpg', '.gif', '.png', '.webp', '.JPEG', '.JPG', '.GIF', '.PNG', '.WEBP']):
+                return redirect('/error/14')
+        
+            if(request.forms.get('f_name')):
+                name = request.forms.get('f_name') + value
+            else:
+                name = data.filename
+            
+            piece = os.path.splitext(name)
+            e_data = sha224(piece[0]) + piece[1]
+                
+            ip = ip_check()
+            if(request.forms.get('f_lice')):
+                lice = request.forms.get('f_lice')
+            else:
+                if(re.search('(?:\.|:)', ip)):
+                    lice = ip + ' 올림'
+                else:
+                    lice = '[[사용자:' + ip + ']] 올림'
+                    
+            if(os.path.exists(os.path.join('image', e_data))):
+                return(redirect('/error/16'))
+                
+            data.save(os.path.join('image', e_data))
+                
+            curs.execute("select title from data where title = ?", ['파일:' + name])
+            exist = curs.fetchall()
+            if(exist): 
+                curs.execute("delete from data where title = ?", ['파일:' + name])
+            
+            curs.execute("insert into data (title, data, acl) values (?, ?, 'admin')", ['파일:' + name, '[[파일:' + name + ']][br][br]{{{[[파일:' + name + ']]}}}[br][br]' + lice])
+            conn.commit()
+            
+            history_plus(
+                '파일:' + name, 
+                '[[파일:' + name + ']][br][br]{{{[[파일:' + name + ']]}}}[br][br]' + lice, 
+                get_time(), 
+                ip, 
+                '(파일 올림)', 
+                '0'
+            )
+            
+            return(redirect('/w/파일:' + name))
+        else:
+            return(redirect('/error/9'))
     else:
         return(
             template(
                 'index', 
                 imp = ['파일 올리기', wiki_set(1), wiki_set(3), login_check(), custom_css(), custom_js(), 0],
-                data =  '<form method="post"> \
-                            <input type="file"> \
+                data =  '<form method="post" enctype="multipart/form-data" accept-charset="utf8"> \
+                            <input type="file" name="f_data"> \
+                            <br> \
+                            <br> \
+                            <input placeholder="파일 이름" name="f_name"> \
+                            <br> \
+                            <br> \
+                            <input placeholder="라이선스" name="f_lice"> \
                             <br> \
                             <br> \
                             <button class="btn btn-primary" type="submit">저장</button> \
@@ -3181,6 +3237,9 @@ def error_test(num = None):
     elif(num == 8):
         title = '가입 오류'
         data = '아이디에는 한글과 알파벳과 공백만 허용 됩니다.'
+    elif(num == 9):
+        title = '파일 올리기 오류'
+        data = '파일이 없습니다.'
     elif(num == 10):
         title = '변경 오류'
         data = '비밀번호가 다릅니다.'
@@ -3189,7 +3248,7 @@ def error_test(num = None):
         data = '이미 로그인 되어 있습니다.'
     elif(num == 14):
         title = '파일 올리기 오류'
-        data = 'jpg, gif, jpeg, png, apng, webp만 가능 합니다.'
+        data = 'jpg, gif, jpeg, png, webp만 가능 합니다.'
     elif(num == 15):
         title = '편집 오류'
         data = '편집 기록은 500자를 넘을 수 없습니다.'

+ 1 - 1
update_mysql.py

@@ -17,7 +17,7 @@ conn = pymysql.connect(
 )
 curs = conn.cursor(pymysql.cursors.DictCursor)   
 
-r_ver = '2.3.1'
+r_ver = '2.3.2'
 
 curs2.execute("create table data(title text, data text, acl text)")
 curs2.execute("create table history(id text, title text, data text, date text, ip text, send text, leng text)")

+ 2 - 1
version.md

@@ -108,6 +108,7 @@
  * 프로젝트 오븐나무 (스킨 + 기타)
  * diff 수정
  * 관리자 사용 기록
+ * 파일 올리기 완성
 
 ## 계속
  * 버그 수정
@@ -132,7 +133,7 @@
 
 ----
 ## 기타
- * 최신 버전 - v2.3.1
+ * 최신 버전 - v2.3.2
 
 ----
 ## 개발 이념

+ 1 - 0
views/index.tpl

@@ -1,5 +1,6 @@
 <html>
     <head>
+        <meta charset="utf-8">
         <title>{{imp[0]}} - {{imp[1]}}</title>
         <link rel="stylesheet" href="/views/css/primer.css">
         <link rel="stylesheet" href="/views/css/style.css">