uploadthing
Your Auth. Our Bandwidth.
The right balance of security and simplicity.
Authentication happens on your server, the upload happens on ours.
export const fileRouter = {
imageUploader: f({ image: { maxFileSize: "4MB" } })
.middleware(async ({ req }) => {
// This code runs on your server before upload
const user = await auth(req);
// Throw to block uploading
if (!user)
throw new UploadThingError("Unauthorized");
// Return metadata to client
return { userId: user.id };
})
.onUploadComplete(async ({ metadata, file }) => {
// ...
}),
} satisfies FileRouter;<UploadButton
endpoint="imageUploader" // Typesafe btw
onClientUploadComplete={(response) => ...}
onUploadError={(error) => ...}
/>
I asked for a better S3 for years. UploadThing exists because we got tired of waiting.
Easily manage your files.
A powerful, intuitive dashboard for developers to securely manage and track all uploaded files.