BURGERFLIPPER101
BURGERFLIPPER101

Reputation: 1342

Uploading image file to Google Bucket in Python

I am attempting to create a function in Python in which I pass a filename and an image object, which I want to be uploaded to a Google storage bucket. I have the bucket already created, I have all the credentials in an environment variable, but I'm confused about the whole process.

Currently I have the following setup:

class ImageStorage:
    bucket_name = os.getenv('STORAGE_BUCKET_NAME')
    project_name = os.getenv('STORAGE_BUCKET_PROJECT_ID')

    client = storage.Client(project=project_name)
    bucket = client.get_bucket(bucket_name)

    def save_image(self, filename, image):
        blob = self.bucket.blob(filename)
        blob.upload_from_file(image)

But once I run this, I get the error:

total bytes could not be determined. Please pass an explicit size, or supply a chunk size for a streaming transfer.

I'm not sure how I can provide a bytes size of this image object. Do I first need to create a file locally from the image object and then pass onto uploading it?

Upvotes: 1

Views: 977

Answers (1)

Shiva
Shiva

Reputation: 2838

As per the Github issue, you should provide chunk_size parameter for stream upload.

blob = self.bucket.blob(filename, chunk_size=262144) # 256KB
blob.upload_from_file(image)

chunk_size (int) – The size of a chunk of data whenever iterating (in bytes). This must be a multiple of 256 KB per the API specification.

Upvotes: 3

Related Questions