1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-02 07:47:32 +00:00

[api] add url for upload

This commit is contained in:
poetwang 2012-10-13 17:35:21 +08:00
parent 6cd0df1a1d
commit 92edeeed80
2 changed files with 28 additions and 1 deletions

View File

@ -22,5 +22,6 @@ urlpatterns = patterns('',
url(r'^op/rename/(?P<repo_id>[^/]+)/$', csrf_exempt(OpRenameView.as_view()), name='rename'),
url(r'^op/move/$', csrf_exempt(OpMoveView.as_view()), name='move'),
url(r'^op/mkdir/(?P<repo_id>[^/]+)/$', csrf_exempt(OpMkdirView.as_view()), name='mkdir'),
url(r'^op/upload/(?P<repo_id>[^/]+)/$', csrf_exempt(OpUploadView.as_view()), name='upload'),
)

View File

@ -38,7 +38,7 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, \
from seahub.utils import list_to_string, \
get_httpserver_root, gen_token, \
check_filename_with_rename, get_accessible_repos, EMPTY_SHA1, \
gen_file_get_url, string2list
gen_file_get_url, string2list, gen_file_upload_url
from seahub.views import access_to_repo, validate_owner
from seahub.contacts.signals import mail_sended
@ -62,6 +62,7 @@ HTTP_ERRORS = {
'410':'Path does not exist',
'411':'Failed to get dirid by path',
'412':'Failed to get fileid by path',
'413':'Above quota',
'415':'Operation not supported',
'416':'Failed to list dir',
'417':'Set password error',
@ -744,3 +745,28 @@ class OpMoveView(ResponseMixin, View):
return reloaddir_if_neccessary (request, dst_repo_id, dst_dir)
class OpUploadView(ResponseMixin, View):
@api_login_required
def post(self, request):
return api_error(request, '407')
@api_login_required
def get(self, request, repo_id):
repo = get_repo(repo_id)
if check_permission(repo_id, request.user.username) == 'rw':
token = seafserv_rpc.web_get_access_token(repo_id,
'dummy',
'upload',
request.user.username)
else:
return api_error(request, '403')
if request.cloud_mode and seafserv_threaded_rpc.check_quota(repo_id) < 0:
return api_error(request, '413')
upload_url = gen_file_upload_url(token, 'upload')
return HttpResponse(json.dumps(upload_url), status=200,
content_type=json_content_type)