Skip to content

Commit 25f9fd0

Browse files
authored
Merge pull request #656 from BrandonDyer64/644-assets-binding
Workers Assets Binding
2 parents a39b723 + 6259703 commit 25f9fd0

File tree

5 files changed

+30
-1
lines changed

5 files changed

+30
-1
lines changed

worker-sandbox/src/assets.rs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#[cfg(not(feature = "http"))]
2+
pub async fn handle_asset(
3+
req: worker::Request,
4+
env: worker::Env,
5+
_data: crate::SomeSharedData,
6+
) -> worker::Result<worker::Response> {
7+
use worker::Url;
8+
9+
let url: Url = req.url()?;
10+
let name: String = url.path_segments().unwrap().nth(1).unwrap().to_string();
11+
let url: String = ["https://dummyurl.com/", &name].concat();
12+
Ok(env
13+
.assets("ASSETS")
14+
.expect("ASSETS BINDING")
15+
.fetch(url, None)
16+
.await?)
17+
}

worker-sandbox/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ use std::sync::{
66
#[cfg(feature = "http")]
77
use tower_service::Service;
88
use worker::*;
9+
910
mod alarm;
11+
mod assets;
1012
mod cache;
1113
mod counter;
1214
mod d1;

worker-sandbox/src/router.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{
2-
alarm, cache, d1, fetch, form, kv, queue, r2, request, service, socket, user, ws,
2+
alarm, assets, cache, d1, fetch, form, kv, queue, r2, request, service, socket, user, ws,
33
SomeSharedData, GLOBAL_STATE,
44
};
55
#[cfg(feature = "http")]
@@ -229,6 +229,7 @@ pub fn make_router<'a>(data: SomeSharedData) -> Router<'a, SomeSharedData> {
229229
Router::with_data(data)
230230
.get("/request", handler_sync!(request::handle_a_request)) // can pass a fn pointer to keep routes tidy
231231
.get_async("/async-request", handler!(request::handle_async_request))
232+
.get_async("/asset/:name", handler!(assets::handle_asset))
232233
.get_async("/websocket", handler!(ws::handle_websocket))
233234
.get_async("/got-close-event", handler!(handle_close_event))
234235
.get_async("/ws-client", handler!(ws::handle_websocket_client))

worker-sandbox/wrangler.toml

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ kv_namespaces = [
1313
SOME_VARIABLE = "some value"
1414
SOME_OBJECT_VARIABLE = { foo = 42, bar = "string" }
1515

16+
[assets]
17+
binding = "ASSETS"
18+
directory = "./public/"
19+
1620
[[services]]
1721
binding = "remote"
1822
service = "remote-service"

worker/src/env.rs

+5
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ impl Env {
9999
self.get_binding(binding)
100100
}
101101

102+
/// Access the worker assets by the binding name configured in your wrangler.toml file.
103+
pub fn assets(&self, binding: &str) -> Result<Fetcher> {
104+
self.get_binding(binding)
105+
}
106+
102107
pub fn hyperdrive(&self, binding: &str) -> Result<Hyperdrive> {
103108
self.get_binding(binding)
104109
}

0 commit comments

Comments
 (0)