HttpCat is a simple, efficient, and stable solution for file uploading and downloading. No external dependencies, easy deployment.
Everything you need for efficient file transfers
AI assistants (Claude, Cursor, CodeBuddy) can directly manage your files
Beautiful React-based management interface for a better user experience
One-click Docker deployment with docker-compose support
AK/SK HMAC-SHA256 signature authentication for scripts, CI/CD and AI integration
Upload, rename, delete images with auto thumbnail generation and gallery view
Detailed upload/download history and usage statistics tracking
UploadToken verification for secure file transfers
WeCom Webhook integration for upload notifications
Share files via link with expiry time, download limit and extraction code protection
Share links support anonymous download without login (configurable)
Split large files into 5MB chunks for parallel upload. Resume from breakpoint after network interruption. Supports up to 100GB files
HTTP Range support for downloads. Use wget/curl -c to resume large file downloads. Drag progress bar in browser without re-downloading
Auto-lock IP for 15min after 5 failed logins in 5min. Pure in-memory, zero external dependencies. Returns 429 during lockout
Explore the HttpCat ecosystem
Core HTTP file transfer service with MCP support and modern React UI
Get started in minutes
# Quick Installation httpcat_version="v0.7.0" tar -zxvf httpcat_${httpcat_version}_linux-amd64.tar.gz cd httpcat_${httpcat_version}_linux-amd64 sudo ./install.sh # Manage service systemctl start httpcat # Start systemctl stop httpcat # Stop systemctl status httpcat # Status
# Docker Compose (Recommended) docker-compose up -d # Or Docker Run docker run -d --name httpcat \ -p 8888:8888 \ -v $(pwd)/data:/app/data \ -v $(pwd)/upload:/app/upload \ httpcat:latest
# Upload file curl -v -F "f1=@/path/to/file" \ -H "UploadToken: YOUR_TOKEN" \ http://localhost:8888/api/v1/file/upload # Download file wget -O xxx.jpg http://127.0.0.1:8888/api/v1/file/download?filename=xxx.jpg
# 1. Enable Open API in svr.yml server: http: auth: open_api_enable: true aksk: your_access_key: your_secret_key # 2. Shell script for AK/SK signature AK="your_access_key" SK="your_secret_key" TIMESTAMP=$(date +%s) BODY_HASH=$(printf '' | openssl dgst -sha256 -hex | awk '{print $NF}') # Build signature string: Method\nPath\nQuery\nAccessKey\nTimeStamp\nBodySHA256 SIGN_STR=$(printf "%s\n%s\n%s\n%s\n%s\n%s" \ "GET" "/api/v1/file/listFiles" "dir=/" \ "${AK}" "${TIMESTAMP}" "${BODY_HASH}") # Calculate HMAC-SHA256 signature SIGNATURE=$(printf '%s' "${SIGN_STR}" | \ openssl dgst -sha256 -hmac "${SK}" -hex | awk '{print $NF}') # 3. Make API request with AK/SK headers curl -s "http://localhost:8888/api/v1/file/listFiles?dir=/" \ -H "AccessKey: ${AK}" \ -H "Signature: ${SIGNATURE}" \ -H "TimeStamp: ${TIMESTAMP}"
# Install SDK pip install httpcat-sdk # Python upload example from httpcat.services.storage.uploader import upload_file file_path = '/path/to/file.txt' upload_token = 'your_token' upload_url = 'http://your-server:8888/api/v1/file/upload' response = upload_file(file_path, upload_token, upload_url) print(response.text)
# MCP Client Configuration (Claude Desktop, Cursor, CodeBuddy) { "mcpServers": { "httpcat": { "type": "sse", "url": "http://your-server:8888/mcp/sse" } } } # Available MCP Tools: # - list_files, get_file_info, upload_file # - upload_image, get_disk_usage, get_upload_history # - request_delete_file, confirm_delete_file
# 1. Init chunked upload session curl -X POST http://localhost:8888/api/v1/file/upload/init \ -H "Content-Type: application/json" \ -H "UploadToken: YOUR_TOKEN" \ -d '{"filename":"bigfile.zip","fileSize":1073741824,"chunkSize":5242880,"fileMD5":"abc123"}' # Returns: {"uploadId":"xxx","chunkSize":5242880,"totalChunks":205} # 2. Upload each chunk (idempotent, retry safe) curl -X POST http://localhost:8888/api/v1/file/upload/chunk \ -H "UploadToken: YOUR_TOKEN" \ -F "uploadId=xxx" \ -F "chunkIndex=0" \ -F "chunk=@/tmp/chunk_0.bin" # 3. Query upload status (resume from breakpoint) curl "http://localhost:8888/api/v1/file/upload/status?uploadId=xxx" \ -H "UploadToken: YOUR_TOKEN" # Returns: {"uploadedChunks":[0,1,2,...],"totalChunks":205} # 4. Complete: merge chunks and verify MD5 curl -X POST http://localhost:8888/api/v1/file/upload/complete \ -H "Content-Type: application/json" \ -H "UploadToken: YOUR_TOKEN" \ -d '{"uploadId":"xxx"}' # 5. Abort session (cleanup temp files) curl -X POST http://localhost:8888/api/v1/file/upload/abort \ -H "Content-Type: application/json" \ -H "UploadToken: YOUR_TOKEN" \ -d '{"uploadId":"xxx"}'