mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 15:38:15 +00:00
update get file uploaded bytes
This commit is contained in:
68
seahub/api2/endpoints/repo_file_uploaded_bytes.py
Normal file
68
seahub/api2/endpoints/repo_file_uploaded_bytes.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Copyright (c) 2012-2016 Seafile Ltd.
|
||||||
|
import logging
|
||||||
|
import posixpath
|
||||||
|
|
||||||
|
from rest_framework.authentication import SessionAuthentication
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from seaserv import seafile_api
|
||||||
|
|
||||||
|
from seahub.api2.authentication import TokenAuthentication
|
||||||
|
from seahub.api2.throttling import UserRateThrottle
|
||||||
|
from seahub.api2.utils import api_error
|
||||||
|
from seahub.views import check_folder_permission
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
json_content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
|
class RepoFileUploadedBytesView(APIView):
|
||||||
|
|
||||||
|
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||||
|
permission_classes = (IsAuthenticated,)
|
||||||
|
throttle_classes = (UserRateThrottle,)
|
||||||
|
|
||||||
|
def get(self, request, repo_id):
|
||||||
|
""" For resumable fileupload
|
||||||
|
|
||||||
|
Permission checking:
|
||||||
|
1. login user.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# argument check
|
||||||
|
parent_dir = request.GET.get('parent_dir', None)
|
||||||
|
if not parent_dir:
|
||||||
|
error_msg = 'parent_dir invalid.'
|
||||||
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
|
file_name = request.GET.get('file_name')
|
||||||
|
if not file_name:
|
||||||
|
error_msg = 'file_name invalid.'
|
||||||
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
|
# resource check
|
||||||
|
repo = seafile_api.get_repo(repo_id)
|
||||||
|
if not repo:
|
||||||
|
error_msg = 'Library %s not found.' % repo_id
|
||||||
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
if not seafile_api.get_dir_id_by_path(repo_id, parent_dir):
|
||||||
|
error_msg = 'Folder %s not found.' % parent_dir
|
||||||
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
# permission check
|
||||||
|
if check_folder_permission(request, repo_id, parent_dir) != 'rw':
|
||||||
|
error_msg = 'Permission denied.'
|
||||||
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
|
file_path = posixpath.join(parent_dir, file_name)
|
||||||
|
try:
|
||||||
|
uploadedBytes = seafile_api.get_upload_tmp_file_offset(repo_id, file_path)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(e)
|
||||||
|
error_msg = 'Internal Server Error'
|
||||||
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
|
return Response({"uploadedBytes": uploadedBytes})
|
@@ -165,7 +165,7 @@ form.fileupload({
|
|||||||
file.size && file.size > block_size) {
|
file.size && file.size > block_size) {
|
||||||
form.fileupload('option', 'maxChunkSize', block_size);
|
form.fileupload('option', 'maxChunkSize', block_size);
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '{% url 'get_file_uploaded_bytes' uploadlink.repo_id %}',
|
url: '{% url 'api-v2.1-repo-file-uploaded-bytes' uploadlink.repo_id %}',
|
||||||
data: {
|
data: {
|
||||||
'parent_dir': "{{path|escapejs}}",
|
'parent_dir': "{{path|escapejs}}",
|
||||||
'file_name': file.name
|
'file_name': file.name
|
||||||
|
@@ -37,6 +37,7 @@ from seahub.api2.endpoints.invitations import InvitationsView
|
|||||||
from seahub.api2.endpoints.invitation import InvitationView
|
from seahub.api2.endpoints.invitation import InvitationView
|
||||||
from seahub.api2.endpoints.notifications import NotificationsView, NotificationView
|
from seahub.api2.endpoints.notifications import NotificationsView, NotificationView
|
||||||
from seahub.api2.endpoints.user_enabled_modules import UserEnabledModulesView
|
from seahub.api2.endpoints.user_enabled_modules import UserEnabledModulesView
|
||||||
|
from seahub.api2.endpoints.repo_file_uploaded_bytes import RepoFileUploadedBytesView
|
||||||
|
|
||||||
from seahub.api2.endpoints.admin.login import Login
|
from seahub.api2.endpoints.admin.login import Login
|
||||||
from seahub.api2.endpoints.admin.file_audit import FileAudit
|
from seahub.api2.endpoints.admin.file_audit import FileAudit
|
||||||
@@ -144,7 +145,6 @@ urlpatterns = patterns(
|
|||||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/current_commit/$', get_current_commit, name='get_current_commit'),
|
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/current_commit/$', get_current_commit, name='get_current_commit'),
|
||||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/history/changes/$', repo_history_changes, name='repo_history_changes'),
|
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/history/changes/$', repo_history_changes, name='repo_history_changes'),
|
||||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/encrypted_file/(?P<file_id>[0-9a-f]{40})/download/$', download_enc_file, name='download_enc_file'),
|
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/encrypted_file/(?P<file_id>[0-9a-f]{40})/download/$', download_enc_file, name='download_enc_file'),
|
||||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/get-file-uploaded-bytes/$', get_file_uploaded_bytes, name='get_file_uploaded_bytes'),
|
|
||||||
url(r'^ajax/u/d/(?P<token>[-0-9a-f]{10})/upload/$', get_file_upload_url_ul, name='get_file_upload_url_ul'),
|
url(r'^ajax/u/d/(?P<token>[-0-9a-f]{10})/upload/$', get_file_upload_url_ul, name='get_file_upload_url_ul'),
|
||||||
url(r'^ajax/group/(?P<group_id>\d+)/repos/$', get_unenc_group_repos, name='get_group_repos'),
|
url(r'^ajax/group/(?P<group_id>\d+)/repos/$', get_unenc_group_repos, name='get_group_repos'),
|
||||||
url(r'^ajax/group/(?P<group_id>\d+)/members/import/$', ajax_group_members_import, name='ajax_group_members_import'),
|
url(r'^ajax/group/(?P<group_id>\d+)/members/import/$', ajax_group_members_import, name='ajax_group_members_import'),
|
||||||
@@ -179,6 +179,7 @@ urlpatterns = patterns(
|
|||||||
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/file/$', FileView.as_view(), name='api-v2.1-file-view'),
|
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/file/$', FileView.as_view(), name='api-v2.1-file-view'),
|
||||||
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/dirents/download-link/$', DirentsDownloadLinkView.as_view(), name='api-v2.1-dirents-download-link-view'),
|
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/dirents/download-link/$', DirentsDownloadLinkView.as_view(), name='api-v2.1-dirents-download-link-view'),
|
||||||
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/zip-task/$', ZipTaskView.as_view(), name='api-v2.1-zip-task'),
|
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/zip-task/$', ZipTaskView.as_view(), name='api-v2.1-zip-task'),
|
||||||
|
url(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/file-uploaded-bytes/$', RepoFileUploadedBytesView.as_view(), name='api-v2.1-repo-file-uploaded-bytes'),
|
||||||
url(r'^api/v2.1/share-link-zip-task/$', ShareLinkZipTaskView.as_view(), name='api-v2.1-share-link-zip-task'),
|
url(r'^api/v2.1/share-link-zip-task/$', ShareLinkZipTaskView.as_view(), name='api-v2.1-share-link-zip-task'),
|
||||||
url(r'^api/v2.1/query-zip-progress/$', QueryZipProgressView.as_view(), name='api-v2.1-query-zip-progress'),
|
url(r'^api/v2.1/query-zip-progress/$', QueryZipProgressView.as_view(), name='api-v2.1-query-zip-progress'),
|
||||||
url(r'^api/v2.1/copy-move-task/$', CopyMoveTaskView.as_view(), name='api-v2.1-copy-move-task'),
|
url(r'^api/v2.1/copy-move-task/$', CopyMoveTaskView.as_view(), name='api-v2.1-copy-move-task'),
|
||||||
|
@@ -1035,31 +1035,6 @@ def get_group_repos(request, groups):
|
|||||||
group_repos.append(r)
|
group_repos.append(r)
|
||||||
return group_repos
|
return group_repos
|
||||||
|
|
||||||
def get_file_uploaded_bytes(request, repo_id):
|
|
||||||
"""
|
|
||||||
For resumable fileupload
|
|
||||||
"""
|
|
||||||
content_type = 'application/json; charset=utf-8'
|
|
||||||
|
|
||||||
parent_dir = request.GET.get('parent_dir')
|
|
||||||
file_name = request.GET.get('file_name')
|
|
||||||
|
|
||||||
if not parent_dir or not file_name:
|
|
||||||
err_msg = _(u'Argument missing')
|
|
||||||
return HttpResponse(json.dumps({"error": err_msg}), status=400,
|
|
||||||
content_type=content_type)
|
|
||||||
|
|
||||||
repo = get_repo(repo_id)
|
|
||||||
if not repo:
|
|
||||||
err_msg = _(u'Library does not exist')
|
|
||||||
return HttpResponse(json.dumps({"error": err_msg}), status=400,
|
|
||||||
content_type=content_type)
|
|
||||||
|
|
||||||
file_path = os.path.join(parent_dir, file_name)
|
|
||||||
uploadedBytes = seafile_api.get_upload_tmp_file_offset(repo_id, file_path)
|
|
||||||
return HttpResponse(json.dumps({"uploadedBytes": uploadedBytes}),
|
|
||||||
content_type=content_type)
|
|
||||||
|
|
||||||
def get_file_upload_url_ul(request, token):
|
def get_file_upload_url_ul(request, token):
|
||||||
"""Get file upload url in dir upload link.
|
"""Get file upload url in dir upload link.
|
||||||
|
|
||||||
|
@@ -183,7 +183,7 @@ define([
|
|||||||
popup.fileupload('option', 'maxChunkSize', block_size);
|
popup.fileupload('option', 'maxChunkSize', block_size);
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: Common.getUrl({
|
url: Common.getUrl({
|
||||||
name: 'get_file_uploaded_bytes',
|
name: 'repo_file_uploaded_bytes',
|
||||||
repo_id: dirents.repo_id
|
repo_id: dirents.repo_id
|
||||||
}),
|
}),
|
||||||
data: {
|
data: {
|
||||||
|
@@ -94,7 +94,6 @@ define([
|
|||||||
case 'del_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/delete/';
|
case 'del_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/delete/';
|
||||||
case 'mv_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/move/';
|
case 'mv_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/move/';
|
||||||
case 'cp_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/copy/';
|
case 'cp_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/copy/';
|
||||||
case 'get_file_uploaded_bytes': return siteRoot + 'ajax/repo/' + options.repo_id + '/get-file-uploaded-bytes/';
|
|
||||||
case 'get_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/';
|
case 'get_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/';
|
||||||
|
|
||||||
// Repos
|
// Repos
|
||||||
@@ -118,6 +117,8 @@ define([
|
|||||||
case 'repo_upload_link': return siteRoot + 'api2/repos/' + options.repo_id + '/upload-link/';
|
case 'repo_upload_link': return siteRoot + 'api2/repos/' + options.repo_id + '/upload-link/';
|
||||||
case 'repo_update_link': return siteRoot + 'api2/repos/' + options.repo_id + '/update-link/';
|
case 'repo_update_link': return siteRoot + 'api2/repos/' + options.repo_id + '/update-link/';
|
||||||
|
|
||||||
|
case 'repo_file_uploaded_bytes': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/file-uploaded-bytes/';
|
||||||
|
|
||||||
// Share admin
|
// Share admin
|
||||||
case 'share_admin_repos': return siteRoot + 'api/v2.1/shared-repos/';
|
case 'share_admin_repos': return siteRoot + 'api/v2.1/shared-repos/';
|
||||||
case 'share_admin_repo': return siteRoot + 'api/v2.1/shared-repos/' + options.repo_id + '/';
|
case 'share_admin_repo': return siteRoot + 'api/v2.1/shared-repos/' + options.repo_id + '/';
|
||||||
|
Reference in New Issue
Block a user