예제 #1
0
 def check_permissions(self, request):
     if not hasattr(request, 'user'):
         raise ChunkedUploadError(status=403,
                                  result='fail',
                                  reason=u'必须先登录才可以上传作品')
     if hasattr(request, 'user') and not request.user.is_authenticated():
         raise ChunkedUploadError(status=403,
                                  result='fail',
                                  reason=u'无权限上传作品')
예제 #2
0
 def is_valid_chunked_upload_request(self, **attrs):
     user = attrs['user']
     filename = attrs['filename']
     if os.path.isfile(
             os.path.join(settings.MEDIA_ROOT, str(user.id),
                          str(filename))):
         raise ChunkedUploadError(
             status=status.HTTP_409_CONFLICT,
             detail='File already exists on the server.')
     if not Media.is_supported_media_type(attrs['filename']):
         raise ChunkedUploadError(
             status=status.HTTP_415_UNSUPPORTED_MEDIA_TYPE,
             detail='This file type is not supported.')
예제 #3
0
    def check_permissions(self, request):
        if not hasattr(request, 'user'):
            raise ChunkedUploadError(status=403,
                                     result='fail',
                                     reason=u'必须先登录才可以上传作品')
        if hasattr(request, 'user') and not request.user.is_authenticated():
            raise ChunkedUploadError(status=403,
                                     result='fail',
                                     reason=u'无权限上传作品')

        upload_file = request.FILES[self.field_name]
        if not upload_file.name.upper().endswith('PDF'):
            raise ChunkedUploadError(status=400,
                                     result='fail',
                                     reason=u'仅支持%s格式的作品上传' % 'PDF')
예제 #4
0
 def check_permissions(self, request):
     if hasattr(request, 'user') and is_allowed_to_upload(request.user):
         return
     raise PermissionDenied()
     raise ChunkedUploadError(
         status=http_status.HTTP_403_FORBIDDEN,
         detail='Authentication credentials were not provided')
예제 #5
0
 def is_valid_chunked_upload(self, request, chunked_upload):
     if request.user != chunked_upload.user:
         raise ChunkedUploadError(
             status=status.HTTP_403_FORBIDDEN,
             detail='Authentication credentials were not correct')
     return super(HisraChunkedUploadView,
                  self).is_valid_chunked_upload(request, chunked_upload)
예제 #6
0
    def _post(self, request, *args, **kwargs):
        upload_id = request.POST.get('upload_id')
        md5 = request.POST.get('md5')

        error_msg = None
        if self.do_md5_check:
            if not upload_id or not md5:
                error_msg = "Both 'upload_id' and 'md5' are required"
        elif not upload_id:
            error_msg = "'upload_id' is required"
        if error_msg:
            raise ChunkedUploadError(status=http_status.HTTP_400_BAD_REQUEST,
                                     detail=error_msg)

        chunked_upload = get_object_or_404(self.get_queryset(request),
                                           upload_id=upload_id)

        self.validate(request)
        self.is_valid_chunked_upload(chunked_upload)
        if self.do_md5_check:
            self.md5_check(chunked_upload, md5)

        chunked_upload.status = COMPLETE
        chunked_upload.completed_on = timezone.now()
        self._save(chunked_upload)
        self.on_completion(chunked_upload, request)

        return Response(self.get_response_data(chunked_upload, request),
                        status=http_status.HTTP_200_OK)
예제 #7
0
 def on_completion(self, chunked_upload, request):
     try:
         Media.objects.create_media(chunked_upload, request.user)
         logger.debug("Media saved")
     except Exception, e:
         logger.debug('Exception creating media: {0}'.format(e.message))
         raise ChunkedUploadError(
             status=status.HTTP_500_INTERNAL_SERVER_ERROR,
             detail='Creating media on server failed')
예제 #8
0
 def md5_check(self, chunked_upload, md5):
     """
     Verify if md5 checksum sent by client matches generated md5.
     """
     print chunked_upload.upload_id
     print '...........'
     print md5
     print '...........'
     print chunked_upload.md5
     print '...........'
     print chunked_upload.md5 == md5
     print '...........'
     if chunked_upload.md5 != md5:
         raise ChunkedUploadError(status=400,
                                  detail='md5 checksum does not match')
예제 #9
0
 def check_permissions(self, request):
     if not request.user.is_superuser:
         raise ChunkedUploadError(status=http_status.HTTP_403_FORBIDDEN)