Storage Quickstart 快速上手
上传一个 Markdown 文件,查看对象元数据,并生成签名下载 URL。
这个快速上手复用 Parse quickstart 中的 token。如果还没有 token,请先调用 POST /v1/dev/auth/token。下面的 API 片段是 AI 生成的 Python、JavaScript 和 Java 客户端示例。
1. 创建示例文件
cat > cortex-storage-quickstart.md <<'EOF'
# Cortex Storage
This file was uploaded through Cortex.
EOF2. 直接上传
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}metadata = {"source": "storage-quickstart", "document_type": "guide"}access_policy = {"access_level": "tenant_shared"}with open("cortex-storage-quickstart.md", "w", encoding="utf-8") as f: f.write("# Cortex Storage\n\nThis file was uploaded through Cortex.")with open("cortex-storage-quickstart.md", "rb") as f: response = requests.post( f"{BASE_URL}/v1/storage/files", headers=auth_headers(), files={"file": ("cortex-storage-quickstart.md", f, "text/markdown")}, data={ "metadata_json": __import__("json").dumps(metadata), "access_policy_json": __import__("json").dumps(access_policy), "tags": "quickstart,docs", }, )response.raise_for_status()print(response.json())const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const form = new FormData();form.append( "file", new Blob(["# Cortex Storage\n\nThis file was uploaded through Cortex."], { type: "text/markdown", }), "cortex-storage-quickstart.md",);form.append("metadata_json", JSON.stringify({ source: "storage-quickstart", document_type: "guide" }));form.append("access_policy_json", JSON.stringify({ access_level: "tenant_shared" }));form.append("tags", "quickstart,docs");const response = await fetch(`${BASE_URL}/v1/storage/files`, { method: "POST", headers: authHeaders, body: form,});if (!response.ok) throw new Error(await response.text());console.log(await response.json());import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { String boundary = "----CortexBoundary" + System.currentTimeMillis(); String body = "" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"file\"; filename=\"cortex-storage-quickstart.md\"\r\n" + "Content-Type: text/markdown\r\n\r\n" + "# Cortex Storage\n\nThis file was uploaded through Cortex.\r\n" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"metadata_json\"\r\n\r\n" + "{\"source\":\"storage-quickstart\",\"document_type\":\"guide\"}\r\n" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"access_policy_json\"\r\n\r\n" + "{\"access_level\":\"tenant_shared\"}\r\n" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"tags\"\r\n\r\n" + "quickstart,docs\r\n" + "--" + boundary + "--\r\n"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/storage/files")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "multipart/form-data; boundary=" + boundary) .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}响应中会包含 object_id。
3. 查看对象
把示例中的 obj_xxx 替换为返回的 object_id。
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}response = requests.get(f"{BASE_URL}/v1/storage/objects/obj_xxx", headers=auth_headers())response.raise_for_status()data = response.json()print(data)const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const response = await fetch(`${BASE_URL}/v1/storage/objects/obj_xxx`, { headers: authHeaders,});if (!response.ok) throw new Error(await response.text());const data = await response.json();console.log(data);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/storage/objects/obj_xxx")) .header("Authorization", "Bearer " + TOKEN) .GET() .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}4. 创建下载 URL
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}response = requests.get(f"{BASE_URL}/v1/storage/objects/obj_xxx/download-url?ttl_seconds=900", headers=auth_headers())response.raise_for_status()data = response.json()print(data)const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const response = await fetch(`${BASE_URL}/v1/storage/objects/obj_xxx/download-url?ttl_seconds=900`, { headers: authHeaders,});if (!response.ok) throw new Error(await response.text());const data = await response.json();console.log(data);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/storage/objects/obj_xxx/download-url?ttl_seconds=900")) .header("Authorization", "Bearer " + TOKEN) .GET() .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}现在你可以把 object_id 传给 Knowledge、Evaluation、Synthesis 或 Parse。