opendal icon indicating copy to clipboard operation
opendal copied to clipboard

new feature: Generate permanent URL for public read

Open wlinna opened this issue 11 months ago • 1 comments

Feature Description

Create a function for Operator (somewhat similar to presign_read) which generates a permanent publicly accessible URL to the resource. For example, I'm using Google Cloud Storage emulator and I have configured Gcs service like this:

Gcs::default()
        .bucket("test")
        .root("/")
        .disable_vm_metadata()
        .allow_anonymous()
        .endpoint("http://127.0.0.1:9199")
        .disable_config_load();

Now let's say I want to access a file "myfile.txt". I would like to generate a direct public access URL that looks like this:

http://localhost:9199/v0/b/test/o/myfile.txt?alt=media

Problem and Solution

Many object storage services such as Google Cloud Storage and S3 allow public read access to files. Operator nicely abstracts all these services, but since it doesn't have the ability to generate permanent and publicly accessible links, I loose this abstraction.

Additional Context

As an alternative, I tried to use .info() to find the necessary information to generate the url. However, neither Operator nor OperatorInfo expose endpoint, which further complicates workarounds.

Are you willing to contribute to the development of this feature?

  • [ ] Yes, I am willing to contribute to the development of this feature.

wlinna avatar Jan 28 '25 12:01 wlinna

Maybe we can just return the url directly if allow_anonymous has been enabled?

Xuanwo avatar Mar 13 '25 12:03 Xuanwo