def __call__(self): # Check if user has permission to add content here sm = getSecurityManager() if not sm.checkPermission(AddPortalContent, self.context): response = self.request.RESPONSE response.setStatus(403) return "You are not authorized to add content to this folder." req = self.request tusrequest = False if TUS_ENABLED: adapter = Zope2RequestAdapter(req) tus = Tus(adapter, **tus_settings) if tus.valid: tusrequest = True tus.handle() if not tus.upload_finished: return else: filename = req.getHeader('FILENAME') if tus.send_file: filedata = req._file filedata.filename = filename else: filepath = req._file.read() filedata = open(filepath) if not tusrequest: if req.REQUEST_METHOD != 'POST': return filedata = self.request.form.get("file", None) if filedata is None: return filename = filedata.filename content_type = mimetypes.guess_type(filename)[0] or "" if not filedata: return # Determine if the default file/image types are DX or AT based ctr = getToolByName(self.context, 'content_type_registry') type_ = ctr.findTypeName(filename.lower(), '', '') or 'File' # Now check that the object is not restricted to be added in the # current context allowed_ids = [fti.getId() for fti in self.context.allowedContentTypes()] if type_ not in allowed_ids: response = self.request.RESPONSE response.setStatus(403) if type_ == 'File': return "You cannot add a File to this folder, try another one" if type_ == 'Image': return "You cannot add an Image to this folder, try another one" dx_based = False pt = getToolByName(self.context, 'portal_types') if IDexterityFTI.providedBy(getattr(pt, type_)): factory = IDXFileFactory(self.context) dx_based = True else: from Products.ATContentTypes.interfaces import IATCTFileFactory factory = IATCTFileFactory(self.context) obj = factory(filename, content_type, filedata) if dx_based: if 'File' in obj.portal_type: size = obj.file.getSize() content_type = obj.file.contentType elif 'Image' in obj.portal_type: size = obj.image.getSize() content_type = obj.image.contentType result = { "type": content_type, "size": size } else: try: size = obj.getSize() except AttributeError: size = obj.getObjSize() result = { "type": obj.getContentType(), "size": size } if tusrequest: tus.cleanup_file() result.update({ 'url': obj.absolute_url(), 'name': obj.getId(), 'UID': IUUID(obj), 'filename': filename }) return json.dumps(result)
def __call__(self): req = self.request tusrequest = False if TUS_ENABLED: adapter = Zope2RequestAdapter(req) tus = Tus(adapter, **tus_settings) if tus.valid: tusrequest = True tus.handle() if not tus.upload_finished: return else: filename = req.getHeader('FILENAME') if tus.send_file: filedata = req._file filedata.filename = filename else: filepath = req._file.read() filedata = open(filepath) if not tusrequest: if req.REQUEST_METHOD != 'POST': return filedata = self.request.form.get("file", None) if filedata is None: return filename = filedata.filename content_type = mimetypes.guess_type(filename)[0] or "" if not filedata: return # Determine if the default file/image types are DX or AT based ctr = getToolByName(self.context, 'content_type_registry') type_ = ctr.findTypeName(filename.lower(), '', '') or 'File' DX_BASED = False if HAS_DEXTERITY: pt = getToolByName(self.context, 'portal_types') if IDexterityFTI.providedBy(getattr(pt, type_)): factory = IDXFileFactory(self.context) DX_BASED = True else: factory = IATCTFileFactory(self.context) else: factory = IATCTFileFactory(self.context) obj = factory(filename, content_type, filedata) if DX_BASED: if 'File' in obj.portal_type: size = obj.file.getSize() content_type = obj.file.contentType elif 'Image' in obj.portal_type: size = obj.image.getSize() content_type = obj.image.contentType result = { "type": content_type, "size": size } else: try: size = obj.getSize() except AttributeError: size = obj.getObjSize() result = { "type": obj.getContentType(), "size": size } if tusrequest: tus.cleanup_file() result.update({ 'url': obj.absolute_url(), 'name': obj.getId(), 'UID': IUUID(obj), 'filename': filename }) return json.dumps(result)
def __call__(self): # Check if user has permission to add content here sm = getSecurityManager() if not sm.checkPermission(AddPortalContent, self.context): response = self.request.RESPONSE response.setStatus(403) return "You are not authorized to add content to this folder." req = self.request tusrequest = False if TUS_ENABLED: adapter = Zope2RequestAdapter(req) tus = Tus(adapter, **tus_settings) if tus.valid: tusrequest = True tus.handle() if not tus.upload_finished: return else: filename = req.getHeader('FILENAME') if tus.send_file: filedata = req._file filedata.filename = filename else: filepath = req._file.read() filedata = open(filepath) if not tusrequest: if req.REQUEST_METHOD != 'POST': return filedata = self.request.form.get("file", None) if filedata is None: return filename = filedata.filename content_type = mimetypes.guess_type(filename)[0] or "" if not filedata: return # Determine if the default file/image types are DX or AT based ctr = getToolByName(self.context, 'content_type_registry') type_ = ctr.findTypeName(filename.lower(), '', '') or 'File' # Now check that the object is not restricted to be added in the # current context allowed_ids = [ fti.getId() for fti in self.context.allowedContentTypes() ] if type_ not in allowed_ids: response = self.request.RESPONSE response.setStatus(403) if type_ == 'File': return "You cannot add a File to this folder, try another one" if type_ == 'Image': return "You cannot add an Image to this folder, try another one" dx_based = False pt = getToolByName(self.context, 'portal_types') if IDexterityFTI.providedBy(getattr(pt, type_)): factory = IDXFileFactory(self.context) dx_based = True else: from Products.ATContentTypes.interfaces import IATCTFileFactory factory = IATCTFileFactory(self.context) obj = factory(filename, content_type, filedata) if dx_based: if 'File' in obj.portal_type: size = obj.file.getSize() content_type = obj.file.contentType elif 'Image' in obj.portal_type: size = obj.image.getSize() content_type = obj.image.contentType result = {"type": content_type, "size": size} else: try: size = obj.getSize() except AttributeError: size = obj.getObjSize() result = {"type": obj.getContentType(), "size": size} if tusrequest: tus.cleanup_file() result.update({ 'url': obj.absolute_url(), 'name': obj.getId(), 'UID': IUUID(obj), 'filename': filename }) return json.dumps(result)
def __call__(self): req = self.request tusrequest = False if TUS_ENABLED: adapter = Zope2RequestAdapter(req) tus = Tus(adapter, **tus_settings) if tus.valid: tusrequest = True tus.handle() if not tus.upload_finished: return else: filename = req.getHeader('FILENAME') if tus.send_file: filedata = req._file filedata.filename = filename else: filepath = req._file.read() filedata = open(filepath) if not tusrequest: if req.REQUEST_METHOD != 'POST': return filedata = self.request.form.get("file", None) if filedata is None: return filename = filedata.filename content_type = mimetypes.guess_type(filename)[0] or "" if not filedata: return # Determine if the default file/image types are DX or AT based ctr = getToolByName(self.context, 'content_type_registry') type_ = ctr.findTypeName(filename.lower(), '', '') or 'File' DX_BASED = False if HAS_DEXTERITY: pt = getToolByName(self.context, 'portal_types') if IDexterityFTI.providedBy(getattr(pt, type_)): factory = IDXFileFactory(self.context) DX_BASED = True else: factory = IATCTFileFactory(self.context) else: factory = IATCTFileFactory(self.context) obj = factory(filename, content_type, filedata) if DX_BASED: if 'File' in obj.portal_type: size = obj.file.getSize() content_type = obj.file.contentType elif 'Image' in obj.portal_type: size = obj.image.getSize() content_type = obj.image.contentType result = {"type": content_type, "size": size} else: try: size = obj.getSize() except AttributeError: size = obj.getObjSize() result = {"type": obj.getContentType(), "size": size} if tusrequest: tus.cleanup_file() result.update({ 'url': obj.absolute_url(), 'name': obj.getId(), 'UID': IUUID(obj), 'filename': filename }) return json.dumps(result)