Letting customers upload files on a Shopify product page
Shopify's cart supports file attachments natively and almost nobody knows it. It is free, it works, and it stops at 20MB, which is exactly where print work begins.
Ashraful
Shopify Select Partner
Short answer: Shopify has no native file upload on product pages. Three routes: an app at $10 to $50 a month, a theme modification using a <input type="file"> in the product form which Shopify stores and attaches to the line item, or a custom upload flow to your own storage for large files. The theme route is free and works up to about 20MB. Past that — and DTF artwork is routinely past that — you need direct-to-storage upload.
If you sell anything personalised, printed, engraved or made to order, the customer has a file and you need it.
Shopify does not do this out of the box. Here is what each route actually involves.
Route 1: an app
Search "file upload" in the Shopify App Store and you will find a dozen. They add an upload field to the product page, store the file, and attach a link to the order.
Cost: $10 to $50 a month, usually tiered by storage or upload count.
Good when: files are small, volume is modest, and you want it working today.
Where it bites: storage limits and retention policies. Read the fine print — some apps delete files after 30 or 90 days, which is a problem if you need the original for a reprint or a dispute. Also check the maximum file size against what your customers actually send, not what you assume they send.
Route 2: the theme route, free
Shopify's cart supports file attachments on line items natively. Almost nobody knows this, because it is barely documented.
Add a file input to the product form in your theme, named as a line item property:
<input type="file" name="properties[Artwork]" accept=".png,.jpg,.pdf" />
The form also needs enctype="multipart/form-data". Shopify uploads the file, stores it, and shows a download link on the order in the admin. Nothing else to install, nothing to pay.
The limit is 20MB per file. That is the hard ceiling, and it is the reason this route does not work for print. A DTF gang sheet, a large format design or a multi-page PDF blows through 20MB routinely.
Other things worth knowing:
- Files are uploaded when the item is added to cart, not at checkout. An abandoned cart still consumed the upload.
- There is no validation. The customer can upload a 2MB JPEG at 72 DPI for a 22-inch print and the order goes through happily.
- The customer sees no preview, so they do not know they uploaded the wrong file until you tell them.
- Multiple files need multiple inputs, each with a distinct property name.
For a store selling engraved gifts with a small logo upload, this is genuinely enough and costs nothing. For print, it is not.
Route 3: direct-to-storage upload
The file goes from the customer's browser straight to your own storage — S3, R2, Google Cloud Storage — and only the resulting URL is attached to the order as a line item property.
This is the route for large files, and it is what any serious print workflow ends up using.
How it works: the product page requests a pre-signed upload URL from a small backend, the browser uploads directly to storage using it, and the returned file key is written into a hidden properties[...] field before the item is added to cart.
What it buys you:
- No practical size limit. Multi-gigabyte files upload fine.
- Resumable uploads. Chunked upload survives a dropped connection, which matters when a customer is uploading 200MB over a phone.
- Validation before purchase. Check dimensions, DPI, colour mode and transparency while the customer is still on the page, and tell them what is wrong before they pay rather than after.
- A preview. A thumbnail confirming the right file landed. This alone removes a significant share of support tickets.
- Retention you control. Your bucket, your lifecycle rules.
What it costs: a fixed build, typically 3 to 5 weeks including the validation and the order integration. Storage costs pennies — R2 and S3 are cheap at these volumes, and R2 has no egress fee, which matters if you are pulling large files back out for production.
| App | Theme route | Direct-to-storage | |
|---|---|---|---|
| Monthly cost | $10 to $50 | None | Storage only, pennies |
| Max file size | Varies, often small | 20MB hard limit | No practical limit |
| Validation before purchase | Rarely | No | Yes |
| Preview for customer | Sometimes | No | Yes |
| Resumable upload | No | No | Yes |
| You control retention | No | Shopify does | Yes |
| Time to live | Today | An afternoon | 3 to 5 weeks |
Validate before the money, not after
This is the part that changes the economics, and it is the reason the third route usually pays for itself.
Without validation, a bad file is discovered by a human, after payment, and now you are emailing a customer to explain that their artwork will not print. They are annoyed, you have lost the time, and a share of those orders refund.
With validation at upload, the same customer is told immediately: "this file is 800 pixels wide, which is 40 DPI at 20 inches — it will print blurry." They fix it and buy. No ticket, no refund, no argument.
What is worth checking:
- Real dimensions against intended print size. Pixel width divided by inches, not the embedded DPI tag, which is metadata and frequently wrong.
- Transparency. For DTF and similar, a missing alpha channel means a white box prints around the design.
- Colour mode. RGB versus CMYK, and what your RIP expects.
- Format. Reject what your workflow cannot use, clearly, at upload.
- File integrity. Truncated uploads happen; a file that will not open is better caught now.
Flag, never auto-fix. Upscaling a low-resolution file to pass a DPI check produces something that validates and prints badly, and nobody finds out until the material is used. Tell the customer, and let them decide.
What happens to the file after the order?
Getting the file is half of it. The other half is getting it into production without someone downloading it by hand and renaming it.
That is order automation: watch for paid orders carrying an artwork property, download the file, re-validate it, file it by order number, and hand it to the print queue. We have written about how that pipeline works end to end, and about tagging the order as the record of what was processed.
A shop with a beautiful upload flow and a person manually filing every job has automated the visible half.
We build file upload, validation and order-to-production automation for print shops and personalised product stores as custom Shopify apps. Fixed price, source handed over, no monthly fee and no storage tiers.
Losing orders to artwork problems found after payment? Book a free 30 minute call. Or see our app development work.
Frequently asked questions
Can customers upload files on a Shopify product page?
Not natively through the admin, but Shopify's cart supports file attachments on line items. Adding <input type="file" name="properties[Artwork]"> to your theme's product form, with enctype="multipart/form-data", gives you free file upload with a 20MB per file limit. Apps and custom upload flows cover larger files.
What is the Shopify file upload size limit?
20MB per file through the native line item property route. That is a hard limit. For larger files you need direct-to-storage upload, where the browser sends the file to your own S3, R2 or GCS bucket and only the URL is attached to the order.
How do I let customers upload large artwork files to Shopify?
Use a pre-signed URL flow: the page requests an upload URL from a small backend, the browser uploads straight to your storage bucket, and the file key is written into a hidden line item property. This removes the size limit and allows resumable uploads for large files over unreliable connections.
Can I validate a customer's file before they pay?
Only with a custom upload flow. The native route and most apps accept whatever is sent. Checking resolution, transparency and colour mode at upload time turns a post-payment support ticket into a fix the customer makes before buying.
Should I automatically fix low-resolution uploads?
No. Upscaling produces a file that passes the resolution check and prints badly, and the problem is discovered after the material is used. Flag it and let the customer decide.
How much does Shopify file upload cost?
The theme route is free. Apps run $10 to $50 a month, usually with storage or upload limits and sometimes with file retention policies that delete originals after 30 to 90 days. A custom direct-to-storage flow is a fixed build with only storage costs afterwards, which are pennies at typical volumes.
Where are Shopify line item property files stored?
Shopify stores them and exposes a download link on the order in the admin. You do not control retention or location. If you need originals for reprints or disputes, use your own storage.
About the author
Ashraful
Shopify Select Partner, Top Rated Plus on Upwork. 700+ Shopify projects shipped over 7+ years: themes, apps, migrations, speed, Hydrogen. Solo shop, no agency middlemen.
Read the full storyWorking on a Shopify project?
That's what I do every day. Pick whichever feels lower-friction.
More from the blog
Keep reading
Shopify automation with no hosting and no monthly fee
The monthly fee in most integration quotes is hosting, and hosting exists to accept inbound connections. Reverse the direction and the entire category of cost disappears.
ReadUsing Shopify order tags as a job ledger
Write the tag last, check it first, make every side effect repeatable. Three sentences that replace a database for once-per-order automation, and keep the work queue visible in the Shopify admin.
ReadBuilding a DTF gang sheet builder on Shopify
A 22x120 inch sheet at 300 DPI is 950 megapixels. That single number decides most of the architecture, and it is why gang sheet pipelines work in testing and fall over in production.
Read