I have a similar issues like How to upload a bytes image on Google Cloud Storage from a Python script.
I tried this
from google.cloud import storage
import cv2
from tempfile import TemporaryFile
import google.auth
credentials, project = google.auth.default()
client = storage.Client()
# https://console.cloud.google.com/storage/browser/[bucket-id]/
bucket = client.get_bucket('document')
# Then do other things...
image=cv2.imread('/Users/santhoshdc/Documents/Realtest/15.jpg')
with TemporaryFile() as gcs_image:
image.tofile(gcs_image)
blob = bucket.get_blob(gcs_image)
print(blob.download_as_string())
blob.upload_from_string('New contents!')
blob2 = bucket.blob('document/operations/15.png')
blob2.upload_from_filename(filename='gcs_image')
This is the error that's posing up
> Traceback (most recent call last): File
> "/Users/santhoshdc/Documents/ImageShapeSize/imageGcloudStorageUpload.py",
> line 13, in <module>
> blob = bucket.get_blob(gcs_image) File "/Users/santhoshdc/.virtualenvs/test/lib/python3.6/site-packages/google/cloud/storage/bucket.py",
> line 388, in get_blob
> **kwargs) File "/Users/santhoshdc/.virtualenvs/test/lib/python3.6/site-packages/google/cloud/storage/blob.py",
> line 151, in __init__
> name = _bytes_to_unicode(name) File "/Users/santhoshdc/.virtualenvs/test/lib/python3.6/site-packages/google/cloud/_helpers.py",
> line 377, in _bytes_to_unicode
> raise ValueError('%r could not be converted to unicode' % (value,)) ValueError: <_io.BufferedRandom name=7> could not be
> converted to unicode
Can anyone guide me what's going wrong or what I'm doing incorrectly?
As suggested by @A.Queue in(gets deleted after 29 days)
The file got uploaded,but uploading a
numpy ndarray
doesn't get saved as an image file on thegoogle-cloud-storage
PS:
numpy array
has to be convert into any image format before saving.This is fairly simple, use the
tempfile
created to store the image, here's the code.You are calling
blob = bucket.get_blob(gcs_image)
which makes no sense.get_blob()
is supposed to get a string argument, namely the name of the blob you want to get. A name. But you pass a file object.I propose this code: