mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-13 22:01:06 +00:00
Added viewing file size limit
This commit is contained in:
@@ -145,7 +145,7 @@ AUTHENTICATION_BACKENDS = (
|
|||||||
ACCOUNT_ACTIVATION_DAYS = 7
|
ACCOUNT_ACTIVATION_DAYS = 7
|
||||||
|
|
||||||
# File preview
|
# File preview
|
||||||
FILE_PREVIEW_MAX_SIZE = 10 * 1024 * 1024
|
FILE_PREVIEW_MAX_SIZE = 30 * 1024 * 1024
|
||||||
USE_PDFJS = True
|
USE_PDFJS = True
|
||||||
FILE_ENCODING_LIST = ['auto', 'utf-8', 'gbk', 'ISO-8859-1', 'ISO-8859-5']
|
FILE_ENCODING_LIST = ['auto', 'utf-8', 'gbk', 'ISO-8859-1', 'ISO-8859-5']
|
||||||
FILE_ENCODING_TRY_LIST = ['utf-8', 'gbk']
|
FILE_ENCODING_TRY_LIST = ['utf-8', 'gbk']
|
||||||
|
@@ -1,14 +1,18 @@
|
|||||||
{% extends 'view_file_base.html' %}
|
{% extends 'view_file_base.html' %}
|
||||||
|
|
||||||
{% block extra_style %}{{block.super}}
|
{% block extra_style %}{{block.super}}
|
||||||
|
{% if not err%}
|
||||||
<link rel="stylesheet" href="{{MEDIA_URL}}css/mediaelementplayer.css" />
|
<link rel="stylesheet" href="{{MEDIA_URL}}css/mediaelementplayer.css" />
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block extra_script %}{{ block.super }}
|
{% block extra_script %}{{ block.super }}
|
||||||
|
{% if not err%}
|
||||||
<script src="{{MEDIA_URL}}js/mediaelement-and-player.min.js"></script>
|
<script src="{{MEDIA_URL}}js/mediaelement-and-player.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$('#file-view').html('<div class="audio-container"><audio src="{{raw_path}}" width="500" height="30"></audio></div>');
|
$('#file-view').html('<div class="audio-container"><audio src="{{raw_path}}" width="500" height="30"></audio></div>');
|
||||||
$('audio').mediaelementplayer(/* Options */);
|
$('audio').mediaelementplayer(/* Options */);
|
||||||
</script>
|
</script>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@@ -77,7 +77,15 @@
|
|||||||
<button data="{{ SITE_ROOT }}repo/{{ repo.id }}/{{ obj_id }}/?file_name={{ filename }}&op=download" id="download">{% trans "Download"%}</button>
|
<button data="{{ SITE_ROOT }}repo/{{ repo.id }}/{{ obj_id }}/?file_name={{ filename }}&op=download" id="download">{% trans "Download"%}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="file-view"> {% block file_view %}{% endblock %} </div>
|
<div id="file-view">
|
||||||
|
{% if err %}
|
||||||
|
<div id="file-view-tip">
|
||||||
|
<p class="error">{{ err }}</p>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
{% block file_view %}{% endblock %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form id="link-send-form" action="" method="post" class="hide">
|
<form id="link-send-form" action="" method="post" class="hide">
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
{% load i18n%}
|
{% load i18n%}
|
||||||
|
|
||||||
{% block extra_script %}{{ block.super }}
|
{% block extra_script %}{{ block.super }}
|
||||||
|
{% if not err%}
|
||||||
<script type="text/javascript" src="{{MEDIA_URL}}flexpaper/js/flexpaper_flash.js"></script>
|
<script type="text/javascript" src="{{MEDIA_URL}}flexpaper/js/flexpaper_flash.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$('#file-view').html('<div id="flash"></div>');
|
$('#file-view').html('<div id="flash"></div>');
|
||||||
@@ -66,4 +67,5 @@
|
|||||||
check_status();
|
check_status();
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</script>
|
</script>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block extra_script %}{{ block.super }}
|
{% block extra_script %}{{ block.super }}
|
||||||
|
{% if not err %}
|
||||||
{% if use_pdfjs %}
|
{% if use_pdfjs %}
|
||||||
<script type="text/javascript" src="{{MEDIA_URL}}js/pdf.js"></script>
|
<script type="text/javascript" src="{{MEDIA_URL}}js/pdf.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@@ -123,4 +124,5 @@ if (!($.browser.msie && parseInt($.browser.version) < 10)) {
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -21,13 +21,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if not err %}
|
{% ifnotequal file_content None %}
|
||||||
{% ifnotequal file_content None %}
|
<div id="sf" class="article">{{ file_content|safe }}</div>
|
||||||
<div id="sf" class="article">{{ file_content|safe }}</div>
|
{% endifnotequal %}
|
||||||
{% endifnotequal %}
|
|
||||||
{% else %}
|
|
||||||
<div id="file-view-tip">
|
|
||||||
<p class="error">{{ err }}</p>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -1,13 +1,17 @@
|
|||||||
{% extends 'view_file_base.html' %}
|
{% extends 'view_file_base.html' %}
|
||||||
|
|
||||||
{% block extra_style %}{{block.super}}
|
{% block extra_style %}{{block.super}}
|
||||||
|
{% if not err%}
|
||||||
<link rel="stylesheet" href="{{MEDIA_URL}}css/mediaelementplayer.css" />
|
<link rel="stylesheet" href="{{MEDIA_URL}}css/mediaelementplayer.css" />
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block extra_script %}{{ block.super }}
|
{% block extra_script %}{{ block.super }}
|
||||||
|
{% if not err%}
|
||||||
<script src="{{MEDIA_URL}}js/mediaelement-and-player.min.js"></script>
|
<script src="{{MEDIA_URL}}js/mediaelement-and-player.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$('#file-view').html('<div class="video-container"><video src="{{raw_path}}" width="800" height="400"></video></div>');
|
$('#file-view').html('<div class="video-container"><video src="{{raw_path}}" width="800" height="400"></video></div>');
|
||||||
$('video').mediaelementplayer(/* Options */);
|
$('video').mediaelementplayer(/* Options */);
|
||||||
</script>
|
</script>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
106
views/file.py
106
views/file.py
@@ -21,7 +21,7 @@ from django.utils.hashcompat import md5_constructor
|
|||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from seaserv import list_dir_by_path, get_repo, web_get_access_token, \
|
from seaserv import list_dir_by_path, get_repo, web_get_access_token, \
|
||||||
get_commits, is_passwd_set, check_permission, get_shared_groups_by_repo,\
|
get_commits, is_passwd_set, check_permission, get_shared_groups_by_repo,\
|
||||||
is_group_user, get_file_id_by_path, get_commit
|
is_group_user, get_file_id_by_path, get_commit, get_file_size
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from base.decorators import ctx_switch_required, repo_passwd_set_required
|
from base.decorators import ctx_switch_required, repo_passwd_set_required
|
||||||
@@ -94,11 +94,7 @@ def repo_file_get(raw_path, file_enc):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
file_response = urllib2.urlopen(raw_path)
|
file_response = urllib2.urlopen(raw_path)
|
||||||
if long(file_response.headers['Content-Length']) > FILE_PREVIEW_MAX_SIZE:
|
content = file_response.read()
|
||||||
err = _(u'File size surpasses 10M, can not be previewed online.')
|
|
||||||
return err, '', None
|
|
||||||
else:
|
|
||||||
content = file_response.read()
|
|
||||||
except urllib2.HTTPError, e:
|
except urllib2.HTTPError, e:
|
||||||
err = _(u'HTTPError: failed to open file online')
|
err = _(u'HTTPError: failed to open file online')
|
||||||
return err, '', None
|
return err, '', None
|
||||||
@@ -248,41 +244,49 @@ def view_file(request, repo_id):
|
|||||||
# get file type and extension
|
# get file type and extension
|
||||||
filetype, fileext = get_file_type_and_ext(u_filename)
|
filetype, fileext = get_file_type_and_ext(u_filename)
|
||||||
|
|
||||||
"""Choose different approach when dealing with different type of file."""
|
|
||||||
img_prev = None
|
img_prev = None
|
||||||
img_next = None
|
img_next = None
|
||||||
ret_dict = {'err': '', 'file_content': '', 'encoding': '', 'file_enc': '',
|
ret_dict = {'err': '', 'file_content': '', 'encoding': '', 'file_enc': '',
|
||||||
'file_encoding_list': [], 'swf_exists': False,
|
'file_encoding_list': [], 'swf_exists': False,
|
||||||
'filetype': filetype}
|
'filetype': filetype}
|
||||||
|
|
||||||
if is_textual_file(file_type=filetype):
|
# Check file size
|
||||||
handle_textual_file(request, filetype, raw_path, ret_dict)
|
fsize = get_file_size(obj_id)
|
||||||
elif filetype == 'Document':
|
if fsize > FILE_PREVIEW_MAX_SIZE:
|
||||||
handle_document(raw_path, obj_id, fileext, ret_dict)
|
from django.template.defaultfilters import filesizeformat
|
||||||
elif filetype == 'PDF':
|
err = _(u'File size surpasses %s, can not be opened online.') % \
|
||||||
handle_pdf(raw_path, obj_id, fileext, ret_dict)
|
filesizeformat(FILE_PREVIEW_MAX_SIZE)
|
||||||
elif filetype == 'Image':
|
ret_dict['err'] = err
|
||||||
parent_dir = os.path.dirname(path)
|
|
||||||
dirs = list_dir_by_path(current_commit.id, parent_dir)
|
|
||||||
if not dirs:
|
|
||||||
raise Http404
|
|
||||||
|
|
||||||
img_list = []
|
|
||||||
for dirent in dirs:
|
|
||||||
if not stat.S_ISDIR(dirent.props.mode):
|
|
||||||
fltype, flext = get_file_type_and_ext(dirent.obj_name)
|
|
||||||
if fltype == 'Image':
|
|
||||||
img_list.append(dirent.obj_name)
|
|
||||||
|
|
||||||
if len(img_list) > 1:
|
|
||||||
img_list.sort(lambda x, y : cmp(x.lower(), y.lower()))
|
|
||||||
cur_img_index = img_list.index(u_filename)
|
|
||||||
if cur_img_index != 0:
|
|
||||||
img_prev = os.path.join(parent_dir, img_list[cur_img_index - 1])
|
|
||||||
if cur_img_index != len(img_list) - 1:
|
|
||||||
img_next = os.path.join(parent_dir, img_list[cur_img_index + 1])
|
|
||||||
else:
|
else:
|
||||||
pass
|
"""Choose different approach when dealing with different type of file."""
|
||||||
|
if is_textual_file(file_type=filetype):
|
||||||
|
handle_textual_file(request, filetype, raw_path, ret_dict)
|
||||||
|
elif filetype == 'Document':
|
||||||
|
handle_document(raw_path, obj_id, fileext, ret_dict)
|
||||||
|
elif filetype == 'PDF':
|
||||||
|
handle_pdf(raw_path, obj_id, fileext, ret_dict)
|
||||||
|
elif filetype == 'Image':
|
||||||
|
parent_dir = os.path.dirname(path)
|
||||||
|
dirs = list_dir_by_path(current_commit.id, parent_dir)
|
||||||
|
if not dirs:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
img_list = []
|
||||||
|
for dirent in dirs:
|
||||||
|
if not stat.S_ISDIR(dirent.props.mode):
|
||||||
|
fltype, flext = get_file_type_and_ext(dirent.obj_name)
|
||||||
|
if fltype == 'Image':
|
||||||
|
img_list.append(dirent.obj_name)
|
||||||
|
|
||||||
|
if len(img_list) > 1:
|
||||||
|
img_list.sort(lambda x, y : cmp(x.lower(), y.lower()))
|
||||||
|
cur_img_index = img_list.index(u_filename)
|
||||||
|
if cur_img_index != 0:
|
||||||
|
img_prev = os.path.join(parent_dir, img_list[cur_img_index - 1])
|
||||||
|
if cur_img_index != len(img_list) - 1:
|
||||||
|
img_next = os.path.join(parent_dir, img_list[cur_img_index + 1])
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
# generate file path navigator
|
# generate file path navigator
|
||||||
zipped = gen_path_link(path, repo.name)
|
zipped = gen_path_link(path, repo.name)
|
||||||
@@ -371,7 +375,7 @@ def view_file(request, repo_id):
|
|||||||
'img_next': img_next,
|
'img_next': img_next,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
def view_file_common(request, repo_id, ret_dict):
|
def view_history_file_common(request, repo_id, ret_dict):
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
# check arguments
|
# check arguments
|
||||||
repo = get_repo(repo_id)
|
repo = get_repo(repo_id)
|
||||||
@@ -405,15 +409,23 @@ def view_file_common(request, repo_id, ret_dict):
|
|||||||
filetype, fileext = get_file_type_and_ext(u_filename)
|
filetype, fileext = get_file_type_and_ext(u_filename)
|
||||||
|
|
||||||
if user_perm:
|
if user_perm:
|
||||||
"""Choose different approach when dealing with different type of file."""
|
# Check file size
|
||||||
if is_textual_file(file_type=filetype):
|
fsize = get_file_size(obj_id)
|
||||||
handle_textual_file(request, filetype, raw_path, ret_dict)
|
if fsize > FILE_PREVIEW_MAX_SIZE:
|
||||||
elif filetype == 'Document':
|
from django.template.defaultfilters import filesizeformat
|
||||||
handle_document(raw_path, obj_id, fileext, ret_dict)
|
err = _(u'File size surpasses %s, can not be opened online.') % \
|
||||||
elif filetype == 'PDF':
|
filesizeformat(FILE_PREVIEW_MAX_SIZE)
|
||||||
handle_pdf(raw_path, obj_id, fileext, ret_dict)
|
ret_dict['err'] = err
|
||||||
else:
|
else:
|
||||||
pass
|
"""Choose different approach when dealing with different type of file."""
|
||||||
|
if is_textual_file(file_type=filetype):
|
||||||
|
handle_textual_file(request, filetype, raw_path, ret_dict)
|
||||||
|
elif filetype == 'Document':
|
||||||
|
handle_document(raw_path, obj_id, fileext, ret_dict)
|
||||||
|
elif filetype == 'PDF':
|
||||||
|
handle_pdf(raw_path, obj_id, fileext, ret_dict)
|
||||||
|
else:
|
||||||
|
pass
|
||||||
# populate return value dict
|
# populate return value dict
|
||||||
ret_dict['repo'] = repo
|
ret_dict['repo'] = repo
|
||||||
ret_dict['obj_id'] = obj_id
|
ret_dict['obj_id'] = obj_id
|
||||||
@@ -431,7 +443,7 @@ def view_file_common(request, repo_id, ret_dict):
|
|||||||
@repo_passwd_set_required
|
@repo_passwd_set_required
|
||||||
def view_history_file(request, repo_id):
|
def view_history_file(request, repo_id):
|
||||||
ret_dict = {}
|
ret_dict = {}
|
||||||
view_file_common(request, repo_id, ret_dict)
|
view_history_file_common(request, repo_id, ret_dict)
|
||||||
if not request.user_perm:
|
if not request.user_perm:
|
||||||
return render_permission_error(request, _(u'Unable to view file'))
|
return render_permission_error(request, _(u'Unable to view file'))
|
||||||
|
|
||||||
@@ -447,7 +459,7 @@ def view_history_file(request, repo_id):
|
|||||||
@repo_passwd_set_required
|
@repo_passwd_set_required
|
||||||
def view_trash_file(request, repo_id):
|
def view_trash_file(request, repo_id):
|
||||||
ret_dict = {}
|
ret_dict = {}
|
||||||
view_file_common(request, repo_id, ret_dict)
|
view_history_file_common(request, repo_id, ret_dict)
|
||||||
if not request.user_perm:
|
if not request.user_perm:
|
||||||
return render_permission_error(request, _(u'Unable to view file'))
|
return render_permission_error(request, _(u'Unable to view file'))
|
||||||
|
|
||||||
@@ -470,7 +482,7 @@ def view_trash_file(request, repo_id):
|
|||||||
@repo_passwd_set_required
|
@repo_passwd_set_required
|
||||||
def view_snapshot_file(request, repo_id):
|
def view_snapshot_file(request, repo_id):
|
||||||
ret_dict = {}
|
ret_dict = {}
|
||||||
view_file_common(request, repo_id, ret_dict)
|
view_history_file_common(request, repo_id, ret_dict)
|
||||||
if not request.user_perm:
|
if not request.user_perm:
|
||||||
return render_permission_error(request, _(u'Unable to view file'))
|
return render_permission_error(request, _(u'Unable to view file'))
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user