소스 검색

fix mimetype detection for downloaded static files

Daniel Sheffield 1 년 전
부모
커밋
e1dfb61420
1개의 변경된 파일11개의 추가작업 그리고 4개의 파일을 삭제
  1. 11 4
      app/rest/validate.py

+ 11 - 4
app/rest/validate.py

@@ -21,6 +21,7 @@
 """
 
 from io import BufferedReader
+import mimetypes
 from itertools import chain
 from bottle import static_file, response, HTTPError, abort, LocalRequest, HTTPResponse
 from urllib.parse import urlparse, quote, quote_plus
@@ -59,10 +60,17 @@ def validate(filename: str) -> bytes:
 
 def validate_file(filename: str, root: str = 'app/rest/static') -> HTTPResponse:
     path = '/'.join([filename,]*2)
-    with open(f'{root}/{path}.name', "r") as f:
-        name = f.read()
+    try:
+        with open(f'{root}/{path}.name', "r") as f:
+            name = f.read()
+    except:
+        name = None
+    if name:
+        mimetype, enc = mimetypes.guess_type(name)
+    else:
+        mimetype = True
     
-    ret = static_file(f'{path}.file', root=root, download=name)
+    ret = static_file(f'{path}.file', root=root, download=name or True, mimetype=mimetype)
     if isinstance(ret, HTTPError):
         return abort(404, f"No such upload: {filename}")
 
@@ -70,7 +78,6 @@ def validate_file(filename: str, root: str = 'app/rest/static') -> HTTPResponse:
     _b32 = bytes_to_base32(_bytes)
     if _b32 != filename:
         return abort(410, f"Uploaded content differs")
-    
     return ret
 
 def validate_parameter(request: LocalRequest, name: str) -> bytes: