def put(self, request, user_id, format=None): try: # allow admin if request.user.character == 1: pass else: # make sure it's your own if user_id != request.user.user_id: return Response({"msg": "Forbidden. You are not the man."}, status=403) except AttributeError: # Anonymous return Response({"msg": "Forbidden. You are not logged in."}, status=403) post_policy = PostPolicy() # set bucket name location for uploads. post_policy.set_bucket_name(DEFAULT_BUCKET) # set key prefix for all incoming uploads. file_token = generate_avatar_token(user_id) post_policy.set_key_startswith(file_token) # set content length for incoming uploads. post_policy.set_content_length_range(0, MAX_AVATAR_SIZE) # set expiry expires_date = datetime.utcnow() + DEFAULT_FILE_URL_TIMEOUT post_policy.set_expires(expires_date) url, signed_form_data = local_minio_client.presigned_post_policy( post_policy) response = {"url": url, "request_form": signed_form_data} return Response(response)
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}
# Note: my-bucketname, my-objectname, YOUR-ACCESSKEYID, and YOUR-SECRETACCESSKEY # are dummy values, please replace them with original values. from datetime import datetime, timedelta from minio import Minio from minio import PostPolicy from minio.error import ResponseError post_policy = PostPolicy() # set bucket name location for uploads. post_policy.set_bucket_name('my-bucketname') # set key prefix for all incoming uploads. post_policy.set_key_startswith('my-objectname') # set content length for incoming uploads. post_policy.set_content_length_range(10, 1024) # set expiry 10 days into future. expires_date = datetime.utcnow()+timedelta(days=10) post_policy.set_expires(expires_date) client = Minio('s3.amazonaws.com', access_key='YOUR-ACCESSKEYID', secret_key='YOUR-SECRETACCESSKEY') try: curl_str = 'curl -X POST my-bucketname.s3.amazonaws.com/' curl_cmd = [curl_str] signed_form_data = client.presigned_post_policy(post_policy) for field in signed_form_data: curl_cmd.append('-F {0}={1}'.format(field, signed_form_data[field]))
# Note: my-bucketname, my-objectname, YOUR-ACCESSKEYID, and YOUR-SECRETACCESSKEY # are dummy values, please replace them with original values. from datetime import datetime, timedelta from minio import Minio from minio import PostPolicy from minio.error import ResponseError post_policy = PostPolicy() # set bucket name location for uploads. post_policy.set_bucket_name('my-bucketname') # set key prefix for all incoming uploads. post_policy.set_key_startswith('my-objectname') # set content length for incoming uploads. post_policy.set_content_length_range(10, 1024) # set expiry 10 days into future. expires_date = datetime.utcnow() + timedelta(days=10) post_policy.set_expires(expires_date) client = Minio('s3.amazonaws.com', access_key='YOUR-ACCESSKEYID', secret_key='YOUR-SECRETACCESSKEY') try: url_str, signed_form_data = client.presigned_post_policy(post_policy) curl_str = 'curl -X POST {0}'.format(url_str) curl_cmd = [curl_str] for field in signed_form_data: curl_cmd.append('-F {0}={1}'.format(field, signed_form_data[field]))