@@ -89,46 +89,111 @@ Use `wrangler dev --remote` if you want R2 operations made during development to
8989
9090An R2 bucket is able to READ, LIST, WRITE, and DELETE objects. You can see an example of all operations below using the Module Worker syntax. Add the following snippet into your project's ` index.js ` file:
9191
92+ import { TabItem , Tabs } from " ~/components" ;
93+
94+ <Tabs > <TabItem label = " TypeScript" icon = " seti:typescript" >
95+ ``` ts
96+ import { WorkerEntrypoint } from " cloudflare:workers" ;
97+
98+ export default class extends WorkerEntrypoint <Env > {
99+ async fetch(request : Request ) {
100+ const url = new URL (request .url );
101+ const key = url .pathname .slice (1 );
102+
103+ switch (request .method ) {
104+ case " PUT" : {
105+ await this .env .R2 .put (key , request .body , {
106+ onlyIf: request .headers ,
107+ httpMetadata: request .headers ,
108+ });
109+ return new Response (` Put ${key } successfully! ` );
110+ }
111+ case " GET" : {
112+ const object = await this .env .R2 .get (key , {
113+ onlyIf: request .headers ,
114+ range: request .headers ,
115+ });
116+
117+ if (object === null ) {
118+ return new Response (" Object Not Found" , { status: 404 });
119+ }
120+
121+ const headers = new Headers ();
122+ object .writeHttpMetadata (headers );
123+ headers .set (" etag" , object .httpEtag );
124+
125+ // When no body is present, preconditions have failed
126+ return new Response (" body" in object ? object .body : undefined , {
127+ status: " body" in object ? 200 : 412 ,
128+ headers ,
129+ });
130+ }
131+ case " DELETE" : {
132+ await this .env .R2 .delete (key );
133+ return new Response (" Deleted!" );
134+ }
135+ default :
136+ return new Response (" Method Not Allowed" , {
137+ status: 405 ,
138+ headers: {
139+ Allow: " PUT, GET, DELETE" ,
140+ },
141+ });
142+ }
143+ }
144+ };
145+ ```
146+ </TabItem > <TabItem label = " JavaScript" icon = " seti:javascript" >
92147``` js
93148export default {
94- async fetch (request , env ) {
95- const url = new URL (request .url );
96- const key = url .pathname .slice (1 );
97-
98- switch (request .method ) {
99- case " PUT" :
100- await env .MY_BUCKET .put (key, request .body );
101- return new Response (` Put ${ key} successfully!` );
102- case " GET" :
103- const object = await env .MY_BUCKET .get (key);
104-
105- if (object === null ) {
106- return new Response (" Object Not Found" , { status: 404 });
107- }
108-
109- const headers = new Headers ();
110- object .writeHttpMetadata (headers);
111- headers .set (" etag" , object .httpEtag );
112-
113- return new Response (object .body , {
114- headers,
115- });
116- case " DELETE" :
117- await env .MY_BUCKET .delete (key);
118- return new Response (" Deleted!" );
119-
120- default :
121- return new Response (" Method Not Allowed" , {
122- status: 405 ,
123- headers: {
124- Allow: " PUT, GET, DELETE" ,
125- },
126- });
127- }
128- },
129- };
149+ async fetch (request , env ) {
150+ const url = new URL (request .url );
151+ const key = url .pathname .slice (1 );
152+
153+ switch (request .method ) {
154+ case " PUT" : {
155+ await this .env .R2 .put (key, request .body , {
156+ onlyIf: request .headers ,
157+ httpMetadata: request .headers ,
158+ });
159+ return new Response (` Put ${ key} successfully!` );
160+ }
161+ case " GET" : {
162+ const object = await this .env .R2 .get (key, {
163+ onlyIf: request .headers ,
164+ range: request .headers ,
165+ });
166+
167+ if (object === null ) {
168+ return new Response (" Object Not Found" , { status: 404 });
169+ }
170+
171+ const headers = new Headers ();
172+ object .writeHttpMetadata (headers);
173+ headers .set (" etag" , object .httpEtag );
174+
175+ // When no body is present, preconditions have failed
176+ return new Response (" body" in object ? object .body : undefined , {
177+ status: " body" in object ? 200 : 412 ,
178+ headers,
179+ });
180+ }
181+ case " DELETE" : {
182+ await this .env .R2 .delete (key);
183+ return new Response (" Deleted!" );
184+ }
185+ default :
186+ return new Response (" Method Not Allowed" , {
187+ status: 405 ,
188+ headers: {
189+ Allow: " PUT, GET, DELETE" ,
190+ },
191+ });
192+ }
193+ }
194+ }
130195```
131-
196+ </ TabItem > </ Tabs >
132197<Render file = " request-dot-clone-warning" product = " workers" />
133198
134199## 5. Bucket access and privacy
0 commit comments