← Cloudflare R2 / r2 / api / workers
Referenční dokumentace Workers API
K API R2 uvnitř Workeru se přistupuje navázáním bucketu R2 na Worker. Worker, který napíšete, může prostřednictvím route poskytovat externí přístup k bucketům, nebo interně pracovat s objekty R2.
R2 API obsahuje některá rozšíření a sémantické rozdíly oproti S3 API. Pokud potřebujete kompatibilitu s S3, zvažte použití S3 kompatibilní API.
Základní pojmy
R2 organizuje uložená data, označovaná jako objekty, do kontejnerů označovaných jako buckety. Buckety jsou základní jednotkou výkonu, škálování a přístupu v rámci R2.
Vytvoření bindingu
Chcete-li svázat bucket R2 se svým Workerem, přidejte do souboru Wrangler následující. Aktualizujte binding vlastnost na platný identifikátor proměnné v JavaScriptu a bucket_name na název vašeho bucketu R2:
{
"r2_buckets": [
{
"binding": "MY_BUCKET", // <~ valid JavaScript variable name
"bucket_name": "<YOUR_BUCKET_NAME>"
}
]
}[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "<YOUR_BUCKET_NAME>"Ve vašem Workeru je nyní vazba na bucket dostupná pod MY_BUCKET proměnná a můžete s ní začít pracovat pomocí metody bucketu popsáno níže.
Definice metod bucketu
Na objektu vazby bucketu vloženém do vašeho kódu jsou k dispozici následující metody.
Pokud chcete například odeslat PUT objekt pomocí výše uvedeného propojení (binding):
export default {
async fetch(request, env) {
const url = new URL(request.url);
const key = url.pathname.slice(1);
switch (request.method) {
case "PUT":
await env.MY_BUCKET.put(key, request.body);
return new Response(`Put ${key} successfully!`);
default:
return new Response(`${request.method} is not allowed.`, {
status: 405,
headers: {
Allow: "PUT",
},
});
}
},
};from workers import WorkerEntrypoint, Response
from urllib.parse import urlparse
class Default(WorkerEntrypoint):
async def fetch(self, request):
url = urlparse(request.url)
key = url.path[1:]
if request.method == "PUT":
await self.env.MY_BUCKET.put(key, request.body)
return Response(f"Put {key} successfully!")
else:
return Response(
f"{request.method} is not allowed.",
status=405,
headers={"Allow": "PUT"}
)-
head(key: string): Promise<R2Object | null>- Načte
R2Objectpro daný klíč obsahující pouze metadata objektu, pokud klíč existuje, anullpokud klíč neexistuje.
- Načte
-
get(key: string, options?: R2GetOptions): Promise<R2ObjectBody | R2Object | null>- Načte
R2ObjectBodypro daný klíč obsahující metadata objektu a tělo objektu jakoReadableStream, pokud klíč existuje, anullpokud klíč neexistuje. - V případě, že podmínka uvedená v
optionsselže,get()vracíR2Objecthodnotoubodynedefinováno.
- Načte
-
put(key: string, value: ReadableStream | ArrayBuffer | ArrayBufferView | string | null | Blob, options?: R2PutOptions): Promise<R2Object | null>- Uloží zadaný
valuea metadata v rámci přidruženékey. Jakmile se zápis zdaří, vrátíR2Objectobsahující metadata o uloženém objektu. - V případě, že podmínka uvedená v
optionsselže,put()vracínull, a objekt nebude uložen. - Zápisy v R2 jsou silně konzistentní. Jakmile se Promise vyřeší, všechny následující operace čtení uvidí tuto dvojici klíč a hodnota globálně.
- Uloží zadaný
-
delete(key: string | string[]): Promise<void>- Odstraní zadané
valuesa metadata v rámci přidruženékeys. Jakmile se odstranění zdaří, vrátívoid. - Odstranění v R2 jsou silně konzistentní. Jakmile se Promise vyřeší, všechny následující operace čtení již globálně neuvidí zadané dvojice klíč a hodnota.
- V rámci jednoho volání lze odstranit až 1000 klíčů.
- Odstraní zadané
-
list(options?: R2ListOptions): Promise<R2Objects>- Vrátí
R2Objectsobsahující seznamR2Objectobsažené v bucketu. - Vrácený seznam objektů je seřazen lexikograficky.
- Vrátí až 1000 položek, ale může jich vrátit méně, aby se snížila zátěž paměti ve Workeru.
- Chcete-li explicitně nastavit počet objektů k výpisu, zadejte R2ListOptions objekt s
limitnastavena vlastnost.
- Vrátí
-
createMultipartUpload(key: string, options?: R2MultipartOptions): Promise<R2MultipartUpload>- Vytvoří vícedílné nahrávání.
- Vrátí Promise, který se přeloží na
R2MultipartUploadobjekt reprezentující nově vytvořené vícedílné nahrávání. Jakmile je vícedílné nahrávání vytvořeno, lze s ním okamžitě globálně pracovat, a to buď prostřednictvím Workers API, nebo prostřednictvím S3 API.
-
resumeMultipartUpload(key: string, uploadId: string): R2MultipartUpload- Vrátí objekt reprezentující multipart upload s daným key a uploadId.
- Operace resumeMultipartUpload neprovádí žádné kontroly platnosti uploadId, ani neověřuje existenci odpovídajícího aktivního vícedílného nahrávání. Účelem je minimalizovat latenci před tím, než bude možné volat následné operace na
R2MultipartUploadobjekt.
R2Object definice
R2Object se vytvoří, když PUT objekt do R2 bucketu. R2Object představuje metadata objektu na základě informací poskytnutých nahrávajícím. Každý objekt, který PUT do R2 bucketu bude mít R2Object vytvořeno.
-
keystring- Klíč objektu.
-
versionstring- Náhodný unikátní řetězec přiřazený konkrétnímu nahrání klíče.
-
sizenumber- Velikost objektu v bajtech.
-
etagstring
-
Etag přiřazený k nahrání objektu.
-
httpEtagstring- Etag objektu v uvozovkách, aby mohl být vrácen jako hlavička.
-
uploadedDate- Objekt Date reprezentující čas nahrání objektu.
-
httpMetadataR2HTTPMetadata- Různé hlavičky HTTP přidružené k objektu. Další informace najdete v Metadata HTTP.
-
customMetadataRecord<string, string>- Mapa vlastních metadat definovaných uživatelem, která jsou přiřazena k objektu.
-
rangeR2Rangevolitelné- A
R2Rangeobjekt obsahující vrácený rozsah objektu.
- A
-
checksumsR2Checksums- A
R2Checksumsobjekt obsahující uložené kontrolní součty objektu. Viz kontrolní součty.
- A
-
writeHttpMetadata(headers: Headers): void- Načte
httpMetadatazR2Objecta aplikuje jejich odpovídající HTTP hlavičky naHeadersvstupní objekt. Viz Metadata HTTP.
- Načte
-
storageClass'Standard' | 'InfrequentAccess'- Třída úložiště přiřazená k objektu. Viz Třídy úložiště.
-
ssecKeyMd5stringvolitelné- Hash MD5 v hexadecimálním kódování pro SSE-C klíč použitý k šifrování (pokud byl zadán). Hash lze použít k určení, který klíč je potřeba k dešifrování objektu.
R2ObjectBody definice
R2ObjectBody představuje metadata objektu spolu s jeho tělem. Vrací se, když GET objekt z bucketu R2. Úplný seznam klíčů pro R2ObjectBody zahrnuje seznam níže a všechny klíče zděděné z R2Object.
-
bodyReadableStream- Hodnota objektu.
-
bodyUsedboolean- Zda byla hodnota objektu spotřebována, nebo ne.
-
arrayBuffer(): Promise<ArrayBuffer>- Vrátí Promise, který se přeloží na
ArrayBufferobsahující hodnotu objektu.
- Vrátí Promise, který se přeloží na
-
text(): Promise<string>- Vrátí Promise, který se přeloží na řetězec obsahující hodnotu objektu.
-
json<T>() : Promise<T>- Vrátí Promise, který se přeloží na daný objekt obsahující hodnotu objektu.
-
blob(): Promise<Blob>- Vrátí Promise, který se přeloží na binární Blob obsahující hodnotu objektu.
R2MultipartUpload definice
R2MultipartUpload objekt se vytvoří při volání createMultipartUpload nebo resumeMultipartUpload. R2MultipartUpload představuje probíhající vícedílné nahrávání.
Nedokončené vícedílné nahrávání se po 7 dnech automaticky zruší.
-
keystring-
keypro vícedílné nahrávání.
-
-
uploadIdstring-
uploadIdpro vícedílné nahrávání.
-
-
uploadPart(partNumber: number, value: ReadableStream | ArrayBuffer | ArrayBufferView | string | Blob, options?: R2MultipartOptions): Promise<R2UploadedPart>- Nahraje jednu část se zadaným číslem části do tohoto vícedílného nahrávání. Všechny části musí mít stejnou velikost, kromě poslední části, která může být menší.
- Vrátí
R2UploadedPartobjekt obsahujícíetagapartNumber. TytoR2UploadedPartobjekty jsou vyžadovány při dokončování vícedílného nahrávání.
-
abort(): Promise<void>- Přeruší multipart upload. Vrací Promise, který se vyřeší, jakmile je nahrávání úspěšně přerušeno.
-
complete(uploadedParts: R2UploadedPart[]): Promise<R2Object>- Dokončí vícedílné nahrávání se zadanými částmi.
- Vrátí Promise, který se přeloží po dokončení celé operace. Jakmile k tomu dojde, je objekt okamžitě globálně dostupný pro jakoukoli následující operaci čtení.
Typy specifické pro metodu
R2GetOptions
-
onlyIfR2Conditional | Headers- Určuje, že se objekt vrátí pouze při splnění určitých podmínek v
R2Conditionalnebo v podmíněných hlavičkách. Více se dozvíte v Podmíněné operace.
- Určuje, že se objekt vrátí pouze při splnění určitých podmínek v
-
rangeR2Range | Headersvolitelné- Určuje, že se má vrátit pouze konkrétní délka (od volitelného posunu) nebo koncová část bajtů objektu na základě rozsahu zadaného v
R2Rangenebo v rozsahuHeaders. Viz Čtení v rozsahu.
- Určuje, že se má vrátit pouze konkrétní délka (od volitelného posunu) nebo koncová část bajtů objektu na základě rozsahu zadaného v
-
ssecKeyArrayBuffer | string- Určuje klíč, který se použije pro SSE-C. Klíč musí mít délku 32 bajtů ve formě řetězce kódovaného v šestnáctkové soustavě nebo objektu ArrayBuffer.
Čtení v rozsahu
R2GetOptions přijímá range parametr, který lze použít k omezení dat vrácených v body.
Existují 3 varianty argumentů, které lze použít v rozsahu:
-
Offset s volitelnou délkou.
-
Volitelný offset s délkou.
-
Přípona.
-
offsetnumber- Bajt, od kterého se mají data vracet, včetně.
-
lengthnumber- Počet bajtů, které se mají vrátit. Pokud je požadováno více bajtů, než kolik jich objekt obsahuje, může být vráceno méně bajtů, než udává toto číslo.
-
suffixnumber- Počet bajtů, které se mají vrátit od konce souboru, počínaje posledním bajtem. Pokud je požadováno více bajtů, než kolik jich objekt obsahuje, může být vráceno méně bajtů, než udává toto číslo.
R2PutOptions
-
onlyIfR2Conditional | Headers- Určuje, že se objekt uloží pouze při splnění určitých podmínek v
R2Conditional. Viz Podmíněné operace.
- Určuje, že se objekt uloží pouze při splnění určitých podmínek v
-
httpMetadataR2HTTPMetadata | Headersvolitelné- Různé hlavičky HTTP přidružené k objektu. Další informace najdete v Metadata HTTP.
-
customMetadataRecord<string, string>volitelné- Mapa vlastních metadat definovaných uživatelem, která budou uložena spolu s objektem.
-
md5ArrayBuffer | stringvolitelné- Hash md5 použitý ke kontrole integrity přijatého objektu.
-
sha1ArrayBuffer | stringvolitelné- Hash SHA-1 použitý ke kontrole integrity přijatého objektu.
-
sha256ArrayBuffer | stringvolitelné- Hash SHA-256 použitý ke kontrole integrity přijatého objektu.
-
sha384ArrayBuffer | stringvolitelné- Hash SHA-384 použitý ke kontrole integrity přijatého objektu.
-
sha512ArrayBuffer | stringvolitelné- Hash SHA-512 použitý ke kontrole integrity přijatého objektu.
-
storageClass'Standard' | 'InfrequentAccess'- Nastaví třídu úložiště objektu, pokud je zadána. V opačném případě bude objekt uložen ve výchozí třídě úložiště přiřazené k bucketu. Více informací naleznete v Třídy úložiště.
-
ssecKeyArrayBuffer | string- Určuje klíč, který se použije pro SSE-C. Klíč musí mít délku 32 bajtů ve formě řetězce kódovaného v šestnáctkové soustavě nebo objektu ArrayBuffer.
R2MultipartOptions
-
httpMetadataR2HTTPMetadata | Headersvolitelné- Různé hlavičky HTTP přidružené k objektu. Další informace najdete v Metadata HTTP.
-
customMetadataRecord<string, string>volitelné- Mapa vlastních metadat definovaných uživatelem, která budou uložena spolu s objektem.
-
storageClassstring- Nastaví třídu úložiště objektu, pokud je zadána. V opačném případě bude objekt uložen ve výchozí třídě úložiště přiřazené k bucketu. Více informací naleznete v Třídy úložiště.
-
ssecKeyArrayBuffer | string- Určuje klíč, který se použije pro SSE-C. Klíč musí mít délku 32 bajtů ve formě řetězce kódovaného v šestnáctkové soustavě nebo objektu ArrayBuffer.
R2ListOptions
-
limitnumbervolitelné-
Počet výsledků, které se mají vrátit. Výchozí hodnota je
1000, s maximálním počtem1000. -
Pokud
includeje nastaveno, může se vrátit méně nežlimitvýsledky ve vaší odpovědi, aby se do ní vešla metadata.
-
-
prefixstringvolitelné- Předpona, podle které se porovnávají klíče. Klíče budou vráceny pouze v případě, že začínají zadanou předponou.
-
cursorstringvolitelné- Neprůhledný token, který určuje, odkud pokračovat ve výpisu objektů. Kurzor lze získat z předchozí operace výpisu.
-
delimiterstringvolitelné- Znak použitý při seskupování klíčů.
-
includeArray<string>volitelné-
Může zahrnovat
httpMetadataa/nebocustomMetadata. Pokud je zahrnete, položky vrácené v seznamu budou obsahovat zadaná metadata. -
Upozorňujeme, že existuje limit na celkové množství dat, které jeden
listoperace může vrátit. Pokud si vyžádáte data, můžete obdržet méně nežlimitvýsledky ve vaší odpovědi, aby se do ní vešla metadata. -
compatibility date musí být nastaven na
2022-08-04nebo novější ve svém souboru Wrangler. Pokud ne, pakr2_list_honor_includepříznak kompatibility musí být nastaven. Jinak se s tím zachází jako sinclude: ['httpMetadata', 'customMetadata']bez ohledu na to, coincludezadaná možnost skutečně je.
To znamená, že aplikace si musí dávat pozor, aby neporovnávaly počet vrácených objektů s vaší
limit. Místo toho použijtetruncatedvlastnost pro zjištění, zdalistpožadavek má k dispozici další data k vrácení. -
const options = {
limit: 500,
include: ["customMetadata"],
};
const listed = await env.MY_BUCKET.list(options);
let truncated = listed.truncated;
let cursor = truncated ? listed.cursor : undefined;
// ❌ - if your limit can't fit into a single response or your
// bucket has less objects than the limit, it will get stuck here.
while (listed.objects.length < options.limit) {
// ...
}
// ✅ - use the truncated property to check if there are more
// objects to be returned
while (truncated) {
const next = await env.MY_BUCKET.list({
...options,
cursor: cursor,
});
listed.objects.push(...next.objects);
truncated = next.truncated;
cursor = next.cursor;
}limit = 500
include = ["customMetadata"]
listed = await self.env.MY_BUCKET.list(limit=limit, include=include)
truncated = listed.truncated
cursor = listed.cursor if truncated else None
# ❌ - if your limit can't fit into a single response or your
# bucket has less objects than the limit, it will get stuck here.
while len(listed.objects) < limit:
...
# ✅ - use the truncated property to check if there are more
# objects to be returned
while truncated:
next_page = await self.env.MY_BUCKET.list(limit=limit, include=include, cursor=cursor)
listed.objects.extend(next_page.objects)
truncated = next_page.truncated
cursor = next_page.cursorR2Objects
Objekt obsahující R2Object pole, vrácené BUCKET_BINDING.list().
-
objectsArray<R2Object>- Pole objektů odpovídajících
listpožadavek.
- Pole objektů odpovídajících
-
truncatedboolean- Pokud je hodnota true, znamená to, že pro aktuální
listpožadavek.
- Pokud je hodnota true, znamená to, že pro aktuální
-
cursorstringvolitelné- Token, který lze předat budoucím
listvolání pro obnovení výpisu od tohoto bodu. Přítomno pouze pokud je truncated true.
- Token, který lze předat budoucím
-
delimitedPrefixesArray<string>-
Pokud je zadán delimiter, obsahuje všechny prefixy mezi zadaným prefixem a dalším výskytem delimiteru.
-
Pokud například není zadán žádný prefix a oddělovačem je '/',
foo/bar/bazby vrátilofoojako oddělený prefix. Pokudfoo/byl předán jako prefix se stejnou strukturou a oddělovačem,foo/barby byl vrácen jako oddělený prefix.
-
Podmíněné operace
Můžete předat R2Conditional objekt na R2GetOptions a R2PutOptions. Pokud kontrola podmínky pro get() selže, tělo nebude vráceno. Díky tomu bude get() mají nižší latenci.
Pokud kontrola podmínky pro put() selže, null bude vrácen místo R2Object.
-
etagMatchesstringvolitelné- Operaci provede, pokud se ETag objektu shoduje se zadaným řetězcem.
-
etagDoesNotMatchstringvolitelné- Operaci provede, pokud se ETag objektu neshoduje se zadaným řetězcem.
-
uploadedBeforeDatevolitelné- Operaci provede, pokud byl objekt nahrán před zadaným datem.
-
uploadedAfterDatevolitelné- Operaci provede, pokud byl objekt nahrán po zadaném datu.
Alternativně můžete předat Headers objekt obsahující podmíněné hlavičky do R2GetOptions a R2PutOptions. Informace o těchto podmíněných hlavičkách najdete v dokumentace MDN o podmíněných požadavcích ↗. Všechny podmíněné hlavičky kromě If-Range jsou podporovány.
Podrobnější informace o podmíněných požadavcích najdete v RFC 7232 ↗.
Metadata HTTP
Tato pole obvykle odpovídají metadatům HTTP předaným při vytvoření objektu. Lze je přepsat při vydání GET požadavků, v takovém případě budou zadané hodnoty vráceny zpět v odpovědi.
-
contentTypestringvolitelné -
contentLanguagestringvolitelné -
contentDispositionstringvolitelné -
contentEncodingstringvolitelné -
cacheControlstringvolitelné -
cacheExpiryDatevolitelné
Kontrolní součty
Pokud byl zadán kontrolní součet při použití put() binding bude k dispozici na vráceném objektu pod checksums vlastnost. Kontrolní součet MD5 bude ve výchozím nastavení zahrnut u objektů, které nejsou vícedílné.
-
md5ArrayBuffervolitelné- Kontrolní součet MD5 objektu.
-
sha1ArrayBuffervolitelné- Kontrolní součet SHA-1 objektu.
-
sha256ArrayBuffervolitelné- Kontrolní součet SHA-256 objektu.
-
sha384ArrayBuffervolitelné- Kontrolní součet SHA-384 objektu.
-
sha512ArrayBuffervolitelné- Kontrolní součet SHA-512 objektu.
R2UploadedPart
R2UploadedPart objekt představuje část, která byla nahrána. R2UploadedPart objekty se vracejí z uploadPart operace a musí být předán do completeMultipartUpload operace.
-
partNumbernumber- Číslo dílu.
-
etagstring-
etagčásti.
-
Třída úložiště
Třída úložiště, kde R2Object se ukládá. Dostupné třídy úložiště jsou Standard a InfrequentAccess. Viz Třídy úložiště
pro více informací.