diff options
author | Arthur Rand <arand@ucsc.edu> | 2018-04-18 10:47:13 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-18 10:47:13 -0700 |
commit | 6e13eb85a862bf8c8a20bc547f7eee9a85641c5c (patch) | |
tree | b94719b5a2b53a6059e487e167c334089955e885 /src/main | |
parent | 979d16d518b05c9f702bb526388bd278b9c51cee (diff) | |
download | driver-core-6e13eb85a862bf8c8a20bc547f7eee9a85641c5c.tar.gz driver-core-6e13eb85a862bf8c8a20bc547f7eee9a85641c5c.tar.bz2 driver-core-6e13eb85a862bf8c8a20bc547f7eee9a85641c5c.zip |
[API-1498] add url method to blobStorage (#157)v1.8.24
* add url method to blobStorage
* typo
* typo
* address comments
* address comments
* remove
* scalafmt
Diffstat (limited to 'src/main')
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 { |