The short answer
Shopify's product page has no native file input, and its cart line-item properties carry text, not binaries. So every working solution does the same two things: store the file somewhere else, then write a link to it onto the line item. Your four options are a standalone form, a generic file-upload app, custom theme code plus your own storage, or a quoting app that reads the file and prices it. For a 3D printing service the last one is the only route where the upload also answers the customer's actual question - how much?
Why there is no upload button
Shopify's cart takes custom data through line-item properties - the properties[Name] fields you can add to a product form. They are strings. There is no place in the cart object for a 40 MB mesh, and no Shopify-hosted bucket that a storefront visitor is allowed to write to. That constraint, not an oversight, is why the App Store has a whole category of upload apps.
Two related things often get mistaken for the missing feature:
- File metafields let you attach files to products and orders from the admin. They are not a customer-facing input.
- Shopify Forms (free, first-party) does accept attachments - but it produces a lead in your marketing tab, not a priced line on an order.
The four routes
1. A separate contact or quote form
Send customers to a form, collect the file as an attachment, and reply with a price by email. Zero cost, works today, and it is how most shops start. It is also the manual quoting loop: you are now the bottleneck, the customer waits hours or days, and a large share of them never reply. Fine for a handful of enquiries a week; it stops scaling well before it stops working.
2. A generic file-upload app
Upload apps add a file field to the product page, push the file to their own storage, and write the URL into a line-item property. That solves collection cleanly. What they do not solve is price: the product still costs whatever the variant says, so you either charge a flat rate regardless of the part, or you refund and re-invoice after you have looked at the model. Watch the size cap and the plan limits - several of these apps meter storage, and 3D files are heavy.
3. Custom theme code plus your own storage
A developer adds an input to the product form, uploads straight to S3 or Cloudflare R2 with a pre-signed URL, and writes the resulting key into a hidden property. Full control, no per-seat app fee, and you own the files. You also own the CORS config, the virus scanning, the retention policy, the GDPR position on where the bucket lives, and the theme update that quietly breaks it. Reasonable if you already have engineering; expensive if you do not.
4. A quoting app that reads the geometry
Instead of just parking the file, the widget parses it in the browser, derives volume, weight, bounding box and estimated print time, and prices the job on the spot. The customer sees a number in a couple of seconds, picks material, colour, infill and quality, and checks out. The upload stops being an admin chore and becomes the conversion step. This is the category 3D printing apps live in, and it is what Filaquote does.
Comparing them
| Route | Customer gets a price | Effort | Best for |
|---|---|---|---|
| Contact / Shopify Form | No - you reply later | None | First few enquiries |
| File-upload app | No - flat variant price | Minutes | Fixed-price customisation (engraving, artwork) |
| Custom code + own bucket | Only if you build the maths | Weeks | Shops with a developer |
| Geometry-based quoting app | Yes, instantly | Minutes | 3D printing and machining services |
Where the file ends up
Whichever route you pick, the file surfaces on the order as a line-item property containing a link. Two details are worth knowing before you configure anything:
- An underscore hides the row from the buyer. A property named
_modelis suppressed on the checkout and confirmation page but still rendered in Shopify admin. That is how apps pass internal references - storage keys, job IDs - without cluttering the receipt. - Draft orders keep the same mechanism. If the app creates a draft order rather than a cart, the properties travel with it, so your fulfilment view looks identical either way.
Practical limits to set
- Size: allow up to about 100 MB. Binary STL for a detailed part runs 20–80 MB; ASCII STL is several times larger; 3MF is compressed and much smaller; STEP from CAD is usually tiny.
- Formats: accept STL, 3MF, STEP/STP and OBJ and reject the rest with a clear message. Which to ask for, and why 3MF is the better default, is covered in STL vs 3MF vs STEP vs OBJ.
- Retention: decide up front how long you keep customer models and say so in your terms & conditions. Customer CAD is often confidential.
- Residency: if you sell into the EU, know which region the bucket is in before a customer asks.
Turn the upload into a checkout
Filaquote adds a drag-and-drop field to your storefront that parses STL, 3MF, STEP and OBJ in the customer's browser, shows a live 3D preview with exact dimensions, and returns your price instantly. The file is stored in EU object storage and linked on the order, and the price is recalculated server-side before the draft order is created.
Add to Shopify→FAQ
Can customers upload files on Shopify without an app?
Not on the product page. Shopify's cart line-item properties carry text, not binaries, so a file has to be stored somewhere else first. The only no-app route is a separate contact form - Shopify Forms accepts attachments - which gets you the file but not an order.
Where do uploaded files appear on a Shopify order?
As a line-item property on the order, holding a link to wherever the app stored the file. You open the order in Shopify admin and click through to download it. A property name starting with an underscore is hidden from the buyer at checkout but still shown to you in admin.
What file size limit should I allow for 3D model uploads?
Plan for 100 MB. A detailed binary STL runs 20–80 MB, ASCII STL is roughly five times larger again, and STEP files from CAD are usually small. If your upload tool caps at 10 MB you will turn away real work.
Should I let customers upload a file before or after they pay?
Before, if the file determines the price - which it does for 3D printing. Collecting the model after checkout means you have taken money for a job you have not costed, and every mis-scaled or unprintable part becomes a refund conversation.