title: Storing Image Using Cloud Functions for Firebase
body: <p>I'm trying to refactor some code to use Cloud Functions for Firebase. The code should store an image at a path in Firebase storage. For the most part the code is the exact same as before except now instead of </p>
  
  <pre><code>server.post('/', (req, res) =&gt; {
    // Some code 
  }
  </code></pre>
  
  <p>I'm using the following according to the Firebase documentation</p>
  
  <pre><code>exports.getProcessedImage = functions.https.onRequest((req, res) =&gt; {
    // Some code
  });
  </code></pre>
  
  <p>The code worked previously but now I'm having trouble getting my test image to save to Firebase. Not sure why. I check the Network tab in developer tools and the getProcessedImage endpoint is triggering the code to run and it responds with a 200 code so not sure what the issue is. Thanks in advance for any help! </p>
  
  <p>My full code is below :)</p>
  
  <pre class="lang-js prettyprint-override"><code>const functions = require('firebase-functions');
  
  const admin = require('firebase-admin');
  admin.initializeApp(functions.config().firebase);
  
  const request = require('request');
  const crypto = require('crypto');
  const storage = require('@google-cloud/storage');
  
  // Firebase Project ID and Service Account Key.
  const gcs = storage({
    projectId: 'snapshelf-aabb55',
    keyFilename: './serviceAccountKey.json'
  });
  
  const bucket = gcs.bucket('snapshelf-aabb55.appspot.com');
  
  function saveImage(url) {
  
      // Generate a random HEX string using crypto (a native node module).
      const randomFileName = crypto.randomBytes(16).toString('hex');
  
      // Fetch image info using a HTTP HEAD request.
      // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD
      request.head(url, (error, info) =&gt; {
          if (error) {
              return console.error(error);
      }
  
      // Download image from Pixelz, then save the image to Firebase
      // using the Google Cloud API and the magic of Node Streams.
      // https://googlecloudplatform.github.io/google-cloud-node/#/docs/google-
      cloud/v0.52.0/storage/file
      // http://stackoverflow.com/questions/28355079/how-do-node-js-streams-work
      request(url)
          .pipe(
              bucket.file(`sample/images/${randomFileName}`).createWriteStream({
                  metadata: {
                      contentType: info.headers['content-type']
                  }
              })
          )
          .on('error', (err) =&gt; {
  
              // Do something if the upload fails.
              console.error(err);
          })
          .on('finish', () =&gt; {
  
              // Do something when everything is done.
  
              // Get download url for stored image
              console.log('Image successfully uploaded to Firebase Storage!')
          });
      });
  }
  
  exports.getProcessedImage = functions.https.onRequest((req, res) =&gt; {
      console.log(req.body.processedImageURL);
      /*
      if (req.body &amp;&amp; req.body.processedImageURL) {
  
          // Get image from Pixelz and save it to Firebase Storage.
          saveImage(req.body.processedImageURL);
  
          return res.status(200).end();
      }
  
      res.status(400).end();
      */
  
      const url = 'https://www2.chemistry.msu.edu/courses/cem352/SS2017_Wulff/MichiganState.jpg'
      console.log(url);
      saveImage(url);
      console.log('Saving url');
      res.status(200).send();
  });
  </code></pre>