From ad39c6948fad1cd367e9236a7d28f6a23de57561 Mon Sep 17 00:00:00 2001 From: zhengxie Date: Fri, 29 Aug 2014 10:54:33 +0800 Subject: [PATCH] Fix multi-upload in dir share link --- seahub/templates/view_shared_upload_link.html | 13 +++++++- seahub/urls.py | 1 + seahub/views/__init__.py | 1 + seahub/views/ajax.py | 30 +++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/seahub/templates/view_shared_upload_link.html b/seahub/templates/view_shared_upload_link.html index 3bf2c1d9fe..6b3ee81b46 100644 --- a/seahub/templates/view_shared_upload_link.html +++ b/seahub/templates/view_shared_upload_link.html @@ -23,7 +23,7 @@ {% if no_quota %}

{% trans "The owner of this library has run out of space." %}

{% else %} -
{% csrf_token %} + {% csrf_token %}
@@ -90,6 +90,17 @@ form.fileupload({ //singleFileUploads: false // using 1 request to upload all files of a selection sequentialUploads: true }) +.bind('fileuploadadd', function(e, data) { + // get url(token) for every file + $.ajax({ + url: '{% url 'get_file_upload_url_ul' uploadlink.token %}?&r={{uploadlink.repo_id }}', + cache: false, + dataType: 'json', + success: function(ret) { + data.url = ret['url']; + } + }); +}) .bind('fileuploaddone', function(e, data) { if (data.textStatus == 'success') { var filename = ""; diff --git a/seahub/urls.py b/seahub/urls.py index 4ad272c97a..13e8c2c029 100644 --- a/seahub/urls.py +++ b/seahub/urls.py @@ -138,6 +138,7 @@ urlpatterns = patterns('', url(r'^ajax/repo/(?P[-0-9a-f]{36})/history/changes/$', repo_history_changes, name='repo_history_changes'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/encrypted_file/(?P[0-9a-f]{40})/download/$', download_enc_file, name='download_enc_file'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/file_op_url/$', get_file_op_url, name='get_file_op_url'), + url(r'^ajax/u/d/(?P[-0-9a-f]{10})/upload/$', get_file_upload_url_ul, name='get_file_upload_url_ul'), url(r'^ajax/group/(?P\d+)/repos/$', get_unenc_group_repos, name='get_group_repos'), url(r'^ajax/my-unenc-repos/$', get_my_unenc_repos, name='get_my_unenc_repos'), url(r'^ajax/unenc-rw-repos/$', unenc_rw_repos, name='unenc_rw_repos'), diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py index 7b30a2d963..1e94db4434 100644 --- a/seahub/views/__init__.py +++ b/seahub/views/__init__.py @@ -1475,6 +1475,7 @@ def view_shared_upload_link(request, token): return render_to_response('view_shared_upload_link.html', { 'repo': repo, 'token': token, + 'uploadlink': uploadlink, 'path': path, 'username': username, 'dir_name': dir_name, diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py index 22f47ffe7c..9e2ee193aa 100644 --- a/seahub/views/ajax.py +++ b/seahub/views/ajax.py @@ -26,6 +26,7 @@ from seahub.options.models import UserOptions, CryptoOptionNotSetError from seahub.notifications.models import UserNotification from seahub.notifications.views import add_notice_from_info from seahub.message.models import UserMessage +from seahub.share.models import UploadLinkShare from seahub.signals import upload_file_successful, repo_created, repo_deleted from seahub.views import get_repo_dirents, validate_owner, \ check_repo_access_permission, get_unencry_rw_repos_by_user, \ @@ -1554,6 +1555,35 @@ def get_file_op_url(request, repo_id): return HttpResponse(json.dumps({"url": url}), content_type=content_type) +def get_file_upload_url_ul(request, token): + """Get file upload url in dir upload link. + + Arguments: + - `request`: + - `token`: + """ + if not request.is_ajax(): + raise Http404 + + content_type = 'application/json; charset=utf-8' + + uls = UploadLinkShare.objects.get_valid_upload_link_by_token(token) + if uls is None: + return HttpResponse(json.dumps({"error": _("Bad upload link token.")}), + status=400, content_type=content_type) + + repo_id = uls.repo_id + r = request.GET.get('r', '') + if repo_id != r: # perm check + return HttpResponse(json.dumps({"error": _("Bad repo id in upload link.")}), + status=403, content_type=content_type) + + acc_token = seafile_api.get_fileserver_access_token(repo_id, 'dummy', + 'upload', + request.user.username) + url = gen_file_upload_url(acc_token, 'upload-aj') + return HttpResponse(json.dumps({"url": url}), content_type=content_type) + @login_required_ajax def repo_history_changes(request, repo_id): changes = {}