diff options
Diffstat (limited to 'src/main/scala/xyz/driver/core')
3 files changed, 19 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/storage/BlobStorage.scala b/src/main/scala/xyz/driver/core/storage/BlobStorage.scala index b12230e..ee6c5d7 100644 --- a/src/main/scala/xyz/driver/core/storage/BlobStorage.scala +++ b/src/main/scala/xyz/driver/core/storage/BlobStorage.scala @@ -38,6 +38,11 @@ trait BlobStorage { /** Delete a stored value. */ def delete(name: String): Future[String] + /** + * Path to specified resource. Checks that the resource exists and returns None if + * it is not found. Depending on the implementation, may throw. + */ + def url(name: String): Future[Option[URL]] } trait SignedBlobStorage extends BlobStorage { diff --git a/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala b/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala index 80076b6..e12c73d 100644 --- a/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala +++ b/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala @@ -1,5 +1,6 @@ package xyz.driver.core.storage +import java.net.URL import java.nio.file.{Files, Path, StandardCopyOption} import akka.stream.scaladsl.{FileIO, Sink, Source} @@ -72,4 +73,10 @@ class FileSystemBlobStorage(root: Path)(implicit ec: ExecutionContext) extends B name } + override def url(name: String): Future[Option[URL]] = exists(name) map { + case true => + Some(root.resolve(name).toUri.toURL) + case false => + None + } } diff --git a/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala b/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala index c176d12..95164c7 100644 --- a/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala +++ b/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala @@ -68,6 +68,13 @@ class GcsBlobStorage(client: Storage, bucketId: String, chunkSize: Int = GcsBlob Option(bucket.get(name)).map(blob => blob.signUrl(duration.length, duration.unit)) } + override def url(name: String): Future[Option[URL]] = Future { + val protocol: String = "https" + val resourcePath: String = s"storage.googleapis.com/${bucket.getName}/" + Option(bucket.get(name)).map { blob => + new URL(protocol, resourcePath, blob.getName) + } + } } object GcsBlobStorage { |