@app.get("/stat") def stat(ref: str): path = resolve_ref(ref) if not path.exists(): raise HTTPException(404) stat = path.stat() return "size": stat.st_size, "mtime": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(stat.st_mtime)), "etag": f""stat.st_mtime-stat.st_size"", "type": "directory" if path.is_dir() else "file"
When using CS3 Raw, please reference this paper and the original CS3 API documentation from CERN/CS3APIs v1.2+.
CS3 Raw drops: shares, public links, garbage collection, file versions, arbitrary metadata, workflows, and space management. Those can be added via sidecar services. 5.1 Server (Python + FastAPI + local filesystem) from fastapi import FastAPI, Header, HTTPException from pathlib import Path import os, json, time app = FastAPI() ROOT = Path("/var/cs3raw") cs3 raw
@app.put("/data") def write(ref: str, request: Request, if_none_match: str = Header(None)): path = resolve_ref(ref) if if_none_match == "*" and path.exists(): raise HTTPException(412, "File exists") path.parent.mkdir(parents=True, exist_ok=True) with path.open("wb") as f: f.write(request.stream()) return "status": "ok"
Authentication: Authorization: Bearer <opaque-token> (or mutual TLS). GET /stat?ref=path:/home/user/notes.txt or | CS3 Raw | Standard CS3 (gRPC) |
"entries": [ "name": "notes.txt", "size": 1024, "etag": "\"abc123\"", "type": "file", "name": "pics", "type": "directory" ]
@app.delete("/data") def delete(ref: str): path = resolve_ref(ref) if path.is_dir(): path.rmdir() else: path.unlink() return Response(status_code=204) # Upload curl -X PUT -H "Authorization: Bearer $TOKEN" \ --data-binary @file.dat \ "https://storage/cs3/raw/v1/data?ref=path:/backups/file.dat" Download curl -H "Authorization: Bearer $TOKEN" "https://storage/cs3/raw/v1/data?ref=path:/backups/file.dat" -o file.dat Stat curl -H "Authorization: Bearer $TOKEN" "https://storage/cs3/raw/v1/stat?ref=path:/backups/file.dat" 6. Performance Benchmarks Test environment: 2 vCPU, 4GB RAM, NVMe local disk, 1 Gbps network. | ReferenceResourceId: ... |
| CS3 Raw | Standard CS3 (gRPC) | |--------------------|-------------------------------------| | stat | Stat() | | read | InitiateDownload() + stream | | write | InitiateUpload() + stream | | delete | Delete() | | list | ListContainerStream() | | Bearer token | Opaque token in Authorization | | ref=path:/... | ReferencePath: ... | | ref=id:... | ReferenceResourceId: ... |