title: Download image data then upload to Google Cloud Storage
body: <p>I have a Flask web app that is running on Google AppEngine.  The app has a form that my user will use to supply image links.  I want to download the image data from the link and then upload it to a Google Cloud Storage bucket.</p>
  
  <p>What I have found so far on Google's documentation tells me to use the 'cloudstorage' client library which I have installed and imported as 'gcs'.<br>
  found here: <a href="https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/read-write-to-cloud-storage" rel="nofollow">https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/read-write-to-cloud-storage</a></p>
  
  <p>I think I am not handling the image data correctly through requests.  I get a 200 code back from the Cloud Storage upload call but there is no object when I look for it in the console.  Here is where I try to retrieve the image and then upload it:</p>
  
  <pre><code>img_resp = requests.get(image_link, stream=True)
  objectName = '/myBucket/testObject.jpg'
  
  gcs_file = gcs.open(objectName,
                      'w',
                      content_type='image/jpeg')
  gcs_file.write(img_resp)
  gcs_file.close()
  </code></pre>
  
  <p>edit:
  Here is my updated code to reflect an answer's suggestion:</p>
  
  <pre><code>image_url = urlopen(url)
  content_type = image_url.headers['Content-Type']
  img_bytes = image_url.read()
  image_url.close()
  
  filename = bucketName + objectName
  options = {'x-goog-acl': 'public-read',
             'Cache-Control': 'private, max-age=0, no-transform'}
  
  with gcs.open(filename,
                'w',
                content_type=content_type,
                options=options) as f:
      f.write(img_bytes)
      f.close()
  </code></pre>
  
  <p>However, I am still getting a 201 response on the POST (create file) call and then a 200 on the PUT call but the object never appears in the console.</p>