public function testCreateGsKeySuccess() { $req = new \google\appengine\CreateEncodedGoogleStorageKeyRequest(); $req->setFilename("/gs/some_bucket/some_object"); $resp = new \google\appengine\CreateEncodedGoogleStorageKeyResponse(); $resp->setBlobKey("some_blob_key"); $this->apiProxyMock->expectCall("blobstore", "CreateEncodedGoogleStorageKey", $req, $resp); $filename = "gcs://some_bucket/some_object"; $this->assertEquals("some_blob_key", BlobstoreService::createGsKey($filename)); $this->apiProxyMock->verify(); }
/** * Serve a Google Cloud Storage file as the response. * * @param string $gcs_filename The name of the Google Cloud Storage object to * serve. * @param mixed $options Array of additional options for serving the object. * content_type: Content-Type to override when known. * save_as: If True then send the file as an attachment. * start: Start index of content-range to send. * end: End index of content-range to send. End index is inclusive. * use_range: Use provided content range from the request's Range header. * Mutually exclusive with start and end. * * @throws InvalidArgumentException If invalid options are supplied. */ public static function serve($gcs_filename, $options = []) { $extra_options = array_diff(array_keys($options), self::$serve_options); if (!empty($extra_options)) { throw new \InvalidArgumentException('Invalid options supplied: ' . implode(',', $extra_options)); } // Determine the range to send $start = util\FindByKeyOrNull($options, "start"); $end = util\FindByKeyOrNull($options, "end"); $use_range = util\FindByKeyOrNull($options, "use_range"); $request_range_header = util\FindByKeyOrNull($_SERVER, "HTTP_RANGE"); $range_header = BlobstoreService::checkRanges($start, $end, $use_range, $request_range_header); $save_as = util\FindByKeyOrNull($options, "save_as"); if (isset($save_as) && !is_string($save_as)) { throw new \InvalidArgumentException("Unexpected value for save_as."); } $blob_key = BlobstoreService::createGsKey($gcs_filename); BlobstoreService::sendHeader(self::BLOB_KEY_HEADER, $blob_key); if (isset($range_header)) { BlobstoreService::sendHeader(self::BLOB_RANGE_HEADER, $range_header); } $content_type = util\FindByKeyOrNull($options, "content_type"); if (isset($content_type)) { BlobstoreService::sendHeader("Content-Type", $content_type); } if (isset($save_as)) { BlobstoreService::sendHeader("Content-Disposition", sprintf("attachment; filename=%s", $save_as)); } }