The moment it happens
Store files sent to a link in S3
Files or file URLs posted to your link are saved in your bucket under the date, and you get a download link.
- Runs
- The moment it happens
- Apps
- AWS
- AI
- Not needed
- Access
- s3:PutObject, s3:GetObject (+ s3:ListBucket, s3:DeleteObject for management commands)
Send this to your assistant
Create a ClickRuntime automation: give me a link I can post a file or file URL to. Upload it to my S3 bucket acme-uploads under today's date and email me a download link that works for 7 days.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Plenty of tools can produce a file but cannot talk to S3: a no-code form that accepts uploads, an image generator, a script on a laptop, a webhook from a scanner. Moving those files to a bucket usually means someone downloads each one and uploads it by hand, or a developer writes a small service with credentials and error handling. Files end up on desktops and in email threads instead of in the one place the team backs up and shares from.
Send a file, or a URL to download one, to your ClickRuntime link. ClickRuntime stores it in your S3 bucket under a key that includes the date, creates a presigned URL for it and emails you the link. The file is saved and shareable within seconds.
It is a quick way to give any tool, even one with no AWS support, a place to deposit its output.
What you get out of it
Files land in one reliable place
Instead of scattering outputs across inboxes and desktops, everything goes into a bucket that is backed up and permissioned. Finding last month's generated images becomes a matter of browsing by date.
Tools without S3 support still work
Anything that can post a file to a URL can now deliver to S3. You do not need an engineer to write an upload service before your form or scanner becomes useful.
Dated keys keep the bucket organized
Because each file is stored under a dated path, you can find items by day and avoid name collisions. Two files called image.png on the same day do not overwrite each other.
Sharing does not mean making things public
A presigned URL gives time-limited access to a single file. You can send it to a client without opening the bucket or the other files in it. Clients get exactly one file, nothing more, and only for a limited time.
Credentials stay out of the sending tool
The sender only needs the link, not AWS keys. If a tool is compromised or a laptop is lost, your AWS credentials are not exposed. A lost laptop does not mean rotating keys.
How it works
What happens, step by step
When a file, or a link to one, is sent to your ClickRuntime link, the automation picks it up straight away.
It saves the file to your S3 bucket in a folder named after today's date.
It creates a temporary download link.
You get an email with the file name, where it was saved and the download link.
Before it runs live
- Connect AWS
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other AWS steps into one automation
Under the hood
The code that runs this automation
from datetime import date
import boto3
from clickruntime import on_event, credentials, http, notify
REGION = "us-east-1"
def aws(service):
return boto3.client(service, region_name=REGION, aws_access_key_id=credentials.secret("AWS_ACCESS_KEY_ID"),
aws_secret_access_key=credentials.secret("AWS_SECRET_ACCESS_KEY"))
BUCKET = "acme-uploads"
@on_event
def handle(event):
body = event.json or {}
if body.get("url"):
resp = http.get(body["url"])
resp.raise_for_status()
data, name = resp.content, body.get("filename") or body["url"].rstrip("/").split("/")[-1]
else:
data, name = event.body.encode(), event.header("x-filename") or f"upload-{event.event_id}"
key = f"{date.today()}/{name}"
s3 = aws("s3")
s3.put_object(Bucket=BUCKET, Key=key, Body=data)
link = s3.generate_presigned_url("get_object", Params={"Bucket": BUCKET, "Key": key}, ExpiresIn=7 * 24 * 3600)
notify.email_me(f"Saved {name} to S3", f"s3://{BUCKET}/{key}\nDownload (7 days): {link}")
return {"key": key, "bytes": len(data)}FAQ
Common questions
How long does the presigned URL work?
Can I send a URL instead of the file itself?
Is there a size limit on the files?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Zip an S3 folder on request
One ZIP of everything under a folder, uploaded back to S3 with a download link in your inbox.
See how it worksRead totals from receipts dropped in S3
New receipts and PDFs in your bucket have their vendor, date and total pulled out and emailed to you.
See how it worksSee yesterday's AWS bill by service
Each morning you get yesterday's spend broken down by service, with costly ones flagged.
See how it worksKeep exploring
Set up “Store files sent to a link in S3” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.