def __call__(self): sm = getSecurityManager() if not sm.checkPermission(permissions.View, self.context.context): raise Unauthorized settings = self.context.settings filepath = self.context.filepath blob = settings.blob_files[filepath] blobfi = openBlob(blob) length = os.fstat(blobfi.fileno()).st_size blobfi.close() ext = os.path.splitext(os.path.normcase(filepath))[1][1:] if ext == 'txt': ct = 'text/plain' else: ct = 'image/%s' % ext self.request.response.setHeader('Last-Modified', rfc1123_date(self.context._p_mtime)) self.request.response.setHeader('Accept-Ranges', 'bytes') self.request.response.setHeader("Content-Length", length) self.request.response.setHeader('Content-Type', ct) request_range = handleRequestRange(self.context, length, self.request, self.request.response) return BlobStreamIterator(blob, **request_range)
def __call__(self): from ZODB.blob import Blob from plone.app.blob.iterators import BlobStreamIterator myblob = Blob() with myblob.open('w') as fd: fd.write('Hi, Blob!') return BlobStreamIterator(myblob)
def _getDexterityFile(self, obj, field): self.request.response.setHeader('Accept-Ranges', 'bytes') self.request.response.setHeader("Content-Length", field.getSize()) self.request.response.setHeader('Content-Type', field.contentType) request_range = handleRequestRange(obj, field.getSize(), self.request, self.request.response) return BlobStreamIterator(field, **request_range)
def __call__(self): data = self.get_data() if data: is_blob = False if isinstance(data, basestring): length = len(data) else: is_blob = True blobfi = openBlob(data) length = fstat(blobfi.fileno()).st_size blobfi.close() self.request.response.setHeader( 'Last-Modified', rfc1123_date(self.context._p_mtime)) resp = self.request.response resp.setHeader( 'Content-Disposition', 'inline; filename=%s.%s' % (self.context.getId(), self.file_ext)) resp.setHeader("Content-Length", length) resp.setHeader('Content-Type', self.content_type) if is_blob: resp.setHeader('Accept-Ranges', 'bytes') range = handleRequestRange(self.context, length, self.request, self.request.response) return BlobStreamIterator(data, **range) else: return data else: raise NotFound
def render_attachment_preview(self, attachment): sm = getSecurityManager() if not sm.checkPermission(permissions.View, self.context): raise Unauthorized r = self.request.response settings = Settings(attachment) if self.preview_type not in ('large', 'normal', 'small'): self.preview_type = 'small' if self.page is None: self.page = 1 filepath = u'%s/dump_%s.%s' % (self.preview_type, self.page, settings.pdf_image_format) blob = settings.blob_files[filepath] blobfi = openBlob(blob) length = os.fstat(blobfi.fileno()).st_size blobfi.close() ext = os.path.splitext(os.path.normcase(filepath))[1][1:] if ext == 'txt': ct = 'text/plain' else: ct = 'image/%s' % ext r.setHeader('Content-Type', ct) r.setHeader('Last-Modified', rfc1123_date(self.context._p_mtime)) r.setHeader('Accept-Ranges', 'bytes') r.setHeader("Content-Length", length) request_range = handleRequestRange(self.context, length, self.request, self.request.response) return BlobStreamIterator(blob, **request_range)
def __call__(self): from ZODB.blob import Blob from plone.app.blob.iterators import BlobStreamIterator myblob = Blob() f = myblob.open("w") f.write("Hi, Blob!") f.close() return BlobStreamIterator(myblob)
def serve_file(self): file = self._getFile() self.set_headers(file) if not INamedBlobFile.providedBy(file): return super(Download, self).__call__() request_range = handleRequestRange(self.context, file.getSize(), self.request, self.request.response) return BlobStreamIterator(file._blob, **request_range)
def __call__(self, *args, **kwargs): resp = self.request.response data = self._file_data() if data is None: raise RuntimeError('No file data contained in form') resp.setHeader('Content-Type', data.contentType) resp.setHeader( 'Content-Disposition', 'attachment; filename="%s"' % data.filename.encode('utf-8')) resp.setHeader('Content-Length', data.getSize()) return BlobStreamIterator(data)
def render_attachment_preview(self, attachment): sm = getSecurityManager() if not sm.checkPermission(permissions.View, self.context): raise Unauthorized r = self.request.response # avoid long dreaded CSRF error annotations = IAnnotations(attachment) if not annotations.get('collective.documentviewer', None): safeWrite(attachment) settings = Settings(attachment) # possibly creates annotation if self.preview_type not in ('large', 'normal', 'small'): self.preview_type = 'small' if self.page is None: self.page = 1 filepath = u'%s/dump_%s.%s' % (self.preview_type, self.page, settings.pdf_image_format) try: blob = settings.blob_files[filepath] except TypeError: # 'NoneType' object has no attribute '__getitem__' # happens e.g. when missing preview for stream attachment return blobfi = openBlob(blob) length = os.fstat(blobfi.fileno()).st_size blobfi.close() ext = os.path.splitext(os.path.normcase(filepath))[1][1:] if ext == 'txt': ct = 'text/plain' else: ct = 'image/%s' % ext r.setHeader('Content-Type', ct) r.setHeader('Last-Modified', rfc1123_date(self.context._p_mtime)) r.setHeader('Accept-Ranges', 'bytes') r.setHeader("Content-Length", length) request_range = handleRequestRange(self.context, length, self.request, self.request.response) return BlobStreamIterator(blob, **request_range)
def render_blob_version(self): # done much like it is done in plone.app.blob's index_html header_value = contentDispositionHeader( disposition='inline', filename=self.context.getFilename().replace('.pdf', '.swf')) blob = self.settings.data blobfi = openBlob(blob) length = fstat(blobfi.fileno()).st_size blobfi.close() self.request.response.setHeader('Last-Modified', rfc1123_date(self.context._p_mtime)) self.request.response.setHeader('Accept-Ranges', 'bytes') self.request.response.setHeader('Content-Disposition', header_value) self.request.response.setHeader("Content-Length", length) self.request.response.setHeader('Content-Type', 'application/x-shockwave-flash') range = handleRequestRange(self.context, length, self.request, self.request.response) return BlobStreamIterator(blob, **range)
def __call__(self): try: data = self.get_data() except IOError: # can be from zeo client blob file weirdness with PIL # ocassionally logger.info('Could not get blob data', exc_info=True) raise NotFound if data: is_blob = False if isinstance(data, basestring): length = len(data) else: is_blob = True blobfi = openBlob(data) length = fstat(blobfi.fileno()).st_size blobfi.close() self.request.response.setHeader( 'Last-Modified', rfc1123_date(self.context._p_mtime)) resp = self.request.response resp.setHeader( 'Content-Disposition', 'inline; filename=%s.%s' % (self.context.getId(), self.file_ext)) resp.setHeader("Content-Length", length) resp.setHeader('Content-Type', self.content_type) if is_blob: resp.setHeader('Accept-Ranges', 'bytes') range = handleRequestRange(self.context, length, self.request, self.request.response) return BlobStreamIterator(data, **range) else: return data else: raise NotFound
def getIterator(self, **kw): """ return a filestream iterator object from the blob """ return BlobStreamIterator(self.blob, **kw)