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'无权限上传作品')
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.')
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')
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')
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)
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)
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')
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')
def check_permissions(self, request): if not request.user.is_superuser: raise ChunkedUploadError(status=http_status.HTTP_403_FORBIDDEN)