def serve_local(request: HttpRequest, path_id: str) -> HttpResponse: local_path = get_local_file_path(path_id) if local_path is None: return HttpResponseNotFound('<p>File not found</p>') # Here we determine whether a browser should treat the file like # an attachment (and thus clicking a link to it should download) # or like a link (and thus clicking a link to it should display it # in a browser tab). This is controlled by the # Content-Disposition header; `django-sendfile` sends the # attachment-style version of that header if and only if the # attachment argument is passed to it. For attachments, # django-sendfile sets the response['Content-disposition'] like # this: `attachment; filename="b'zulip.txt'"; filename*=UTF-8''zulip.txt`. # # The "filename" field (used to name the file when downloaded) is # unreliable because it doesn't have a well-defined encoding; the # newer filename* field takes precedence, since it uses a # consistent format (urlquoted). For more details on filename* # and filename, see the below docs: # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition attachment = True file_type = guess_type(local_path)[0] if file_type is not None and (file_type.startswith("image/") or file_type == "application/pdf"): attachment = False return sendfile(request, local_path, attachment=attachment)
def serve_local(request: HttpRequest, path_id: str) -> HttpResponse: local_path = get_local_file_path(path_id) if local_path is None: return HttpResponseNotFound('<p>File not found</p>') # Here we determine whether a browser should treat the file like # an attachment (and thus clicking a link to it should download) # or like a link (and thus clicking a link to it should display it # in a browser tab). This is controlled by the # Content-Disposition header; `django-sendfile2` sends the # attachment-style version of that header if and only if the # attachment argument is passed to it. For attachments, # django-sendfile2 sets the response['Content-disposition'] like # this: `attachment; filename="zulip.txt"; filename*=UTF-8''zulip.txt`. # The filename* parameter is omitted for ASCII filenames like this one. # # The "filename" field (used to name the file when downloaded) is # unreliable because it doesn't have a well-defined encoding; the # newer filename* field takes precedence, since it uses a # consistent format (urlquoted). For more details on filename* # and filename, see the below docs: # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition mimetype, encoding = guess_type(local_path) attachment = mimetype not in INLINE_MIME_TYPES return sendfile(request, local_path, attachment=attachment, mimetype=mimetype, encoding=encoding)
def serve_local(request: HttpRequest, path_id: str) -> FileResponse: import os import mimetypes local_path = get_local_file_path(path_id) if local_path is None: return HttpResponseNotFound('<p>File not found</p>') filename = os.path.basename(local_path) response = FileResponse(open(local_path, 'rb'), content_type=mimetypes.guess_type(filename)) return response
def serve_local(request: HttpRequest, path_id: str) -> FileResponse: import os import mimetypes local_path = get_local_file_path(path_id) if local_path is None: return HttpResponseNotFound('<p>File not found</p>') filename = os.path.basename(local_path) response = FileResponse(open(local_path, 'rb'), content_type = mimetypes.guess_type(filename)) return response
def serve_local(request, path_id): # type: (HttpRequest, str) -> HttpResponse import os import mimetypes local_path = get_local_file_path(path_id) if local_path is None: return HttpResponseNotFound('<p>File not found</p>') filename = os.path.basename(local_path) response = FileResponse(open(local_path, 'rb'), content_type = mimetypes.guess_type(filename)) # type: ignore # https://github.com/python/typeshed/issues/559 return response
def serve_local(request, path_id): # type: (HttpRequest, str) -> HttpResponse import os import mimetypes local_path = get_local_file_path(path_id) if local_path is None: return HttpResponseNotFound('<p>File not found</p>') filename = os.path.basename(local_path) response = FileResponse(open(local_path, 'rb'), content_type = mimetypes.guess_type(filename)) return response response['Content-Disposition'] = 'attachment; filename=%s' % (filename)
def serve_local(request: HttpRequest, path_id: str) -> HttpResponse: local_path = get_local_file_path(path_id) if local_path is None: return HttpResponseNotFound('<p>File not found</p>') return sendfile(request, local_path)