Install
openclaw skills install @icexun/drop-files-skillUpload generated HTML/Markdown files to DropFiles and get a shareable public link. Invoke when the user wants to share, publish, or generate a public link for any HTML or Markdown content they produced.
openclaw skills install @icexun/drop-files-skillUpload HTML or Markdown content to the DropFiles service and return a public shareable link. The service is free, globally accessible, and hosted on Cloudflare's edge network.
Invoke this skill when the user wants to:
Use the bundled wrapper script. Do NOT construct curl commands or JSON payloads manually.
python3 scripts/upload.py [OPTIONS]
The script handles content reading, JSON serialization, temp-file management, curl invocation (Cloudflare WAF blocks non-curl HTTP clients), response parsing, and temp-file cleanup. Run python3 scripts/upload.py --help for the full interface.
--file > --content > stdin)cat file.md | python3 scripts/upload.py --json--file PATH: python3 scripts/upload.py --file report.md --json--content TEXT: only for short inline content| Option | Values | Default | Notes |
|---|---|---|---|
--type | html | markdown | auto | auto | auto detects HTML by <html / <!doctype prefix, else Markdown. |
--expire | 1h | 1d | 7d | 30d | 7d | Link lifetime. |
--title | string | — | Optional title shown on the share page. |
--lang | en | zh | auto | auto | Language hint for the share page. |
--json | flag | off | Output full JSON response (recommended for agents). Without it, prints human-readable URL: / Preview: / Expires: lines. |
The default is no password — the share link is publicly accessible by anyone with the URL.
--password "the password".--generate-password. The script generates a random 6-digit numeric code (e.g. 482917), includes it in the upload, and surfaces it in the output. Always relay the generated password back to the user so they can share it with viewers.type: use auto unless the user specifies.expire: default 7d unless the user requests a different lifetime.title: optional, set if the user provides one.--password.--generate-password.--json for reliable parsing):
python3 scripts/upload.py --file content.html --type html --expire 7d --json
{"success": true, "data": {"url": "...", "preview_url": "...", "expire_at": "...", ...}} (plus a top-level password field if --generate-password was used).{"success": false, "error": {"code": "...", "message": "..."}}.url (and preview_url if relevant) to the user. If a password was generated, prominently display it: Generated password: XXXXXX.error.message to the user and suggest fixes (see error codes below).| Code | Meaning |
|---|---|
CONTENT_REQUIRED | content field is empty. |
CONTENT_TOO_LARGE | Content exceeds 5 MB. |
INVALID_TYPE | type is not html / markdown / auto. |
INVALID_EXPIRE | expire is not 1h / 1d / 7d / 30d. |
RATE_LIMIT_EXCEEDED | Too many requests from the same IP — wait and retry. |
NETWORK_ERROR | curl could not reach the server (local script-side). |
PARSE_ERROR | Response could not be parsed (local script-side). |
RATE_LIMIT_EXCEEDED, wait and retry.<script> tags and event handlers are removed.preview_url adds ?preview=1 and is useful when embedding the link in a context that should not inflate the access counter on initial load.