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 *
 from func import *
 
 
-r_ver = '2.3.1'
+r_ver = '2.3.2'
 p_ver = ''
 p_ver = ''
 
 
 try:
 try:
@@ -1485,6 +1485,7 @@ def other():
                                 ' * [[wiki:admin_list|관리자 목록]]\r\n' + \
                                 ' * [[wiki:admin_list|관리자 목록]]\r\n' + \
                                 ' * [[wiki:give_log|권한 목록]]\r\n' + \
                                 ' * [[wiki:give_log|권한 목록]]\r\n' + \
                                 ' * [[wiki:manager/1|관리자 메뉴]]\r\n' + \
                                 ' * [[wiki:manager/1|관리자 메뉴]]\r\n' + \
+                                ' * [[wiki:upload|파일 올리기]]\r\n' + \
                                 '== 버전 ==\r\n' + \
                                 '== 버전 ==\r\n' + \
                                 '이 오픈나무는 [[https://github.com/2DU/openNAMU/blob/SQLite/version.md|' + r_ver + p_ver + ']]판 입니다.', 0, 0),
                                 '이 오픈나무는 [[https://github.com/2DU/openNAMU/blob/SQLite/version.md|' + r_ver + p_ver + ']]판 입니다.', 0, 0),
             menu = 0
             menu = 0
@@ -2924,21 +2925,76 @@ def user_topic_list(name = None, num = 1):
         )
         )
     )
     )
     
     
-@route('/upload')
+@route('/upload', method=['GET', 'POST'])
 def upload():
 def upload():
-    ip = ip_check()
-    if(ban_check() == 0):
+    if(ban_check() == 1):
         return(redirect('/ban'))
         return(redirect('/ban'))
     
     
     if(request.method == 'POST'):
     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:
     else:
         return(
         return(
             template(
             template(
                 'index', 
                 'index', 
                 imp = ['파일 올리기', wiki_set(1), wiki_set(3), login_check(), custom_css(), custom_js(), 0],
                 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> \
                             <br> \
                             <br> \
                             <button class="btn btn-primary" type="submit">저장</button> \
                             <button class="btn btn-primary" type="submit">저장</button> \
@@ -3181,6 +3237,9 @@ def error_test(num = None):
     elif(num == 8):
     elif(num == 8):
         title = '가입 오류'
         title = '가입 오류'
         data = '아이디에는 한글과 알파벳과 공백만 허용 됩니다.'
         data = '아이디에는 한글과 알파벳과 공백만 허용 됩니다.'
+    elif(num == 9):
+        title = '파일 올리기 오류'
+        data = '파일이 없습니다.'
     elif(num == 10):
     elif(num == 10):
         title = '변경 오류'
         title = '변경 오류'
         data = '비밀번호가 다릅니다.'
         data = '비밀번호가 다릅니다.'
@@ -3189,7 +3248,7 @@ def error_test(num = None):
         data = '이미 로그인 되어 있습니다.'
         data = '이미 로그인 되어 있습니다.'
     elif(num == 14):
     elif(num == 14):
         title = '파일 올리기 오류'
         title = '파일 올리기 오류'
-        data = 'jpg, gif, jpeg, png, apng, webp만 가능 합니다.'
+        data = 'jpg, gif, jpeg, png, webp만 가능 합니다.'
     elif(num == 15):
     elif(num == 15):
         title = '편집 오류'
         title = '편집 오류'
         data = '편집 기록은 500자를 넘을 수 없습니다.'
         data = '편집 기록은 500자를 넘을 수 없습니다.'

+ 1 - 1
update_mysql.py

@@ -17,7 +17,7 @@ conn = pymysql.connect(
 )
 )
 curs = conn.cursor(pymysql.cursors.DictCursor)   
 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 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)")
 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 수정
  * diff 수정
  * 관리자 사용 기록
  * 관리자 사용 기록
+ * 파일 올리기 완성
 
 
 ## 계속
 ## 계속
  * 버그 수정
  * 버그 수정
@@ -132,7 +133,7 @@
 
 
 ----
 ----
 ## 기타
 ## 기타
- * 최신 버전 - v2.3.1
+ * 최신 버전 - v2.3.2
 
 
 ----
 ----
 ## 개발 이념
 ## 개발 이념

+ 1 - 0
views/index.tpl

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