Cloud Storage
Client for Google Cloud Storage API.
Getting Started
To get started with sbt, add the dependency to your project in build.sbt
scala
libraryDependencies ++= Seq(
"com.anymindgroup" %% "zio-gcp-auth" % "latest",
"com.anymindgroup" %% "zio-gcp-storage" % "latest", // includes zio-gcp-storage-v1 and zio-gcp-iamcredentials-v1
)Usage example
Upload file to storage bucket, create signed url, delete file
scala
import zio.*, com.anymindgroup.gcp.*, storage.*, auth.defaultAccessTokenBackend
import v1.resources.Objects, sttp.model.{Header, MediaType, Method}
object storage_example extends ZIOAppDefault:
def run =
for
backend <- defaultAccessTokenBackend()
bucket = "my-bucket"
objPath = List("folder", "my_file.txt")
objContent = "my file content".getBytes("UTF-8")
// insert file
_ <- backend
.send(
Objects
.insert(bucket = bucket, name = Some(objPath.mkString("/")))
.headers(
Header.contentType(MediaType.TextPlain),
Header.contentLength(objContent.length),
)
.body(objContent)
)
.map(_.body)
.flatMap:
case Right(body) => ZIO.logInfo(s"Upload ok: $body")
case Left(err) => ZIO.dieMessage(s"Failure on upload: $err")
// create signed url
signedUrl <- V4SignUrlRequestBuilder
.create()
.signUrlRequest(
bucket = bucket,
resourcePath = objPath,
contentType = None,
method = Method.GET,
serviceAccountEmail = "example@example-project.iam.gserviceaccount.com",
signAlgorithm = V4SignAlgorithm.`GOOG4-RSA-SHA256`,
expiresInSeconds = V4SignatureExpiration.inSeconds(300),
)
.flatMap(_.send(backend).flatMap(r => ZIO.fromEither(r.body)))
_ <- ZIO.logInfo(s"✅ Created signed url: $signedUrl")
// delete file
_ <- backend
.send(Objects.delete(`object` = objPath.mkString("/"), bucket = bucket))
.flatMap:
_.body match
case Right(body) => ZIO.logInfo(s"Object deleted.")
case Left(err) => ZIO.logError(s"Failure on deleting: $err")
yield ()