def _create_presigned_post_policy(bucket_name, content_id, mimetype, size): from datetime import datetime, timedelta from minio import PostPolicy post_policy = PostPolicy() post_policy.set_bucket_name(bucket_name) post_policy.set_key_startswith(content_id) post_policy.set_content_length_range(size, size) post_policy.set_content_type(mimetype) expires_date = datetime.utcnow() + timedelta(days=1) post_policy.set_expires(expires_date) post_policy.append_policy('eq', '$acl', 'bucket-owner-full-control') return post_policy
def post_object(self, bucket_name, object_name=None, content_type=None): post_policy = PostPolicy() post_policy.set_bucket_name(bucket_name) if object_name: post_policy.set_key(object_name) if content_type: post_policy.set_content_type(content_type) post_policy.set_content_length_range(0, 1024000) expires_date = datetime.utcnow() + timedelta(days=10) post_policy.set_expires(expires_date) return self.minioClient.presigned_post_policy(post_policy)
def generate_container_upload_url( self, container: Container, blob_name: str, expires: int = 3600, acl: str = None, meta_data: MetaData = None, content_disposition: str = None, content_length: ContentLength = None, content_type: str = None, cache_control: str = None, extra: ExtraOptions = None, ) -> FormPost: if content_disposition: logger.warning(messages.OPTION_NOT_SUPPORTED, "content_disposition") if cache_control: logger.warning(messages.OPTION_NOT_SUPPORTED, "cache_control") meta_data = {} if meta_data is None else meta_data post_policy = PostPolicy() post_policy.set_bucket_name(container.name) post_policy.set_key_startswith(blob_name) if content_length: min_range, max_range = content_length post_policy.set_content_length_range(min_range, max_range) if content_type: post_policy.set_content_type(content_type) for meta_name, meta_value in meta_data.items(): meta_name = self._OBJECT_META_PREFIX + meta_name post_policy.policies.append(("eq", "$%s" % meta_name, meta_value)) post_policy.form_data[meta_name] = meta_value expires_date = datetime.utcnow() + timedelta(seconds=expires) post_policy.set_expires(expires_date) url, fields = self.client.presigned_post_policy(post_policy) return {"url": url, "fields": fields}