File upload vs photo upload — what's the difference
Photo upload is a subset of file upload restricted to photos (JPG/PNG/HEIC). File upload accepts everything relevant to your product category. For photo mugs, use photo upload. For corporate logos on tumblers, use file upload (accepts vector SVG/AI/EPS for scalable logos). For embroidery, use file upload (accepts DST/EXP stitch files).
Shopify's native file upload — the limitation
Shopify supports file inputs via <input type="file" name="properties[Artwork]"> in theme code. Three fatal limitations for production use:
- Page-style cart only — doesn't work with drawer cart most modern themes use (Shopify Help Center documents this)
- No format validation — customer can upload PSD, DOCX, or anything
- No file size cap — 20 MB PSD will succeed and fail at POD partner
Every meaningful upload flow uses a personalizer app. The app uploads to its own cloud storage, validates + converts, attaches URL as line-item property.
Setup with Print It My Way Pro (10 minutes)
- Install Print It My Way Pro ($13.99/mo — file upload requires Pro; free plan is text-only)
- Dashboard → New Personalizer → drag in File Upload field
- Configure accepted formats: JPG, PNG, HEIC (default photo set) + SVG, AI, EPS, PDF (add vectors) + DST, EXP, PES (add embroidery)
- Set max file size: 10 MB (Basic), 25 MB (Pro), 100 MB (Unlimited)
- Enable auto-conversion (HEIC → JPG, PSD → PNG rejected)
- Enable DPI validation (photo uploads only)
- Attach personalizer to product
- Test upload from mobile + desktop
Accepted file formats — complete reference
Photo formats (consumer products)
| Format | Best for | Notes |
|---|---|---|
| JPG / JPEG | Universal photos | Lossy compression; smaller file size; safe default |
| PNG | Logos with transparency | Lossless; larger file; alpha channel for transparent backgrounds |
| HEIC | iPhone photos (default since iOS 11) | Auto-convert to JPG server-side + preserve EXIF orientation |
| WebP | Modern web format | Not universally accepted by POD partners; convert to JPG server-side |
| GIF | Rarely useful for print | Reject; usually accidental upload |
Vector formats (logo work, print shops)
| Format | Best for | Notes |
|---|---|---|
| SVG | Web-native vector logos | Best for scalable print; small file size; opens in any editor |
| AI | Adobe Illustrator native | Industry standard for professional design; accept on Pro+ |
| EPS | Legacy vector format | Widely supported by print shops; accept for corporate customers |
| Print-ready documents | Business cards, flyers, brochures; validate has bleed marks if you need them |
Embroidery-specific
| Format | Machine compatibility | Notes |
|---|---|---|
| DST | Tajima (universal) | Industry standard; accept as default |
| EXP | Bernina, Melco | Common commercial embroidery |
| PES | Brother | Home + commercial Brother machines |
| PXF | Pfaff | Less common; accept if you have Pfaff customers |
File size limits
| Tier | Max file size | Rationale |
|---|---|---|
| Free / Basic | 10 MB | Fits most JPG at 300 DPI up to 20×24 inches; mobile-friendly |
| Pro | 25 MB | Covers PNG with transparency at high DPI |
| Unlimited | 100 MB | Vector AI files, RAW photos, embroidery masters |
Above 100 MB: upload experience degrades on mobile networks (multi-minute uploads that fail on connection drops). Encourage customer to compress or offer alternative delivery (email attachment to your support).
DPI validation (for raster uploads)
Raster formats (JPG, PNG, HEIC) need DPI validation to prevent blurry prints. Vector formats (SVG, AI, EPS, PDF) don't — they scale infinitely.
DPI = pixels per inch at print size. Configure per product:
- Standard print (mugs, phone cases): warn 150 DPI, block 100 DPI
- Small print (business cards, labels): warn 600 DPI, block 300 DPI
- Large canvas (24×36+): warn 100 DPI, block 75 DPI
- DTG apparel: warn 200 DPI, block 150 DPI
Cart display for uploaded files
App stores file URL as line-item property. Cart template renders as image thumbnail if URL is image, or as link if URL is non-image:
Dawn theme handles this automatically. Older themes need cart-item.liquid customization:
{% for property in item.properties %}
{% unless property.first[0] == '_' %}
{% if property.last contains 'https://' %}
{% if property.last contains '.jpg' or property.last contains '.png' %}
<img src="{{ property.last }}" width="60" alt="{{ property.first }}">
{% else %}
<a href="{{ property.last }}" target="_blank">{{ property.first }}</a>
{% endif %}
{% else %}
{{ property.first }}: {{ property.last }}
{% endif %}
{% endunless %}
{% endfor %}
POD partner file handoff
Uploaded file URL passes to POD partner as line-item property on order. Partner:
- Reads order via Shopify Order API
- Extracts file URL from properties
- Downloads file to their print queue
- Prints at target DPI + format
- Ships to customer
Zero merchant intervention if configured correctly. Print It My Way + Printful/Printify/Gelato work this way natively.
Copyright + legal handling
Customer uploads potentially copyrighted artwork — you print it — you're legally the reproducer. Mitigations:
- Terms checkbox before upload: "I own the rights to this artwork or have permission to use it commercially"
- Automated screening (optional): Google Cloud Vision detects logos, characters (Disney, Nike, band logos). Flag for manual review.
- DMCA safe harbor: register a DMCA agent ($6 USCO filing), publish DMCA policy page
- Manual review queue for high-value orders: orders >$100 held for merchant approval before printing
Print It My Way includes terms checkbox + screening (Pro tier) + manual review queue (Unlimited tier).
Common issues + fixes
| Issue | Cause | Fix |
|---|---|---|
| Upload fails on mobile silently | File exceeds mobile network stability | Cap max upload at 10 MB for mobile; show progress bar; auto-retry on connection drop |
| PSD uploaded — customer confused | Format not rejected in UI | Reject at file picker with clear message "Please export to JPG, PNG, or PDF" |
| Vector logo rasterized incorrectly | SVG not preserved through pipeline | Personalizer must pass SVG as-is to POD; some rasterize wrongly |
| DST embroidery file rejected | Personalizer app doesn't accept embroidery formats | Enable in field settings; if not supported, switch to embroidery-focused app |
| Print file wrong color profile | CMYK vs sRGB mismatch | Convert on server; most POD partners want sRGB PNG |
| Upload URL expires before POD reads | Storage retention too short | Set retention to at least 90 days post-fulfillment |
Best app comparison
| App | Photo formats | Vector (SVG/AI/EPS) | Embroidery (DST) | Max size | Entry price |
|---|---|---|---|---|---|
| Print It My Way Pro | All + HEIC | Yes | Yes | 25 MB (100 MB Unlimited) | $13.99/mo |
| Zakeke | All + HEIC | Yes | Partial | Varies | ~$29.99/mo |
| Customily | All | Yes | No | Varies | Fee variants |
| Bold Product Options | All | Partial | No | 10 MB | $14.99/mo |
| Fancy Product Designer | All + HEIC | Yes | No | Varies | Mid-market |
Frequently asked questions
How to add file upload to Shopify product?
Personalizer app required (Print It My Way, Zakeke). Shopify's native file input only works on page-style cart + no validation. App uploads to own cloud storage + attaches URL as line-item property.
What file formats to accept?
Photo products: JPG, PNG, HEIC. Logo work: add SVG, AI, EPS. Print jobs: add PDF. Embroidery: add DST, EXP, PES. Reject PSD, DOCX, CDR, SKP.
Max file size for Shopify uploads?
10 MB Basic, 25 MB Pro, 100 MB Unlimited. Above 100 MB, mobile uploads degrade.
HEIC iPhone photos — support?
Required for consumer photo products. Auto-convert to JPG + preserve EXIF orientation. Missing = 40-60% mobile abandon rate.
DPI validation on file upload?
Raster formats (JPG, PNG, HEIC) yes — warn 150 DPI, block 100 DPI at print size. Vector formats (SVG, AI, EPS) scale infinitely, no DPI check needed.
How to display uploaded file in cart?
App stores URL as line-item property. Dawn theme auto-displays; older themes need cart template edit to render as thumbnail if image, link if document.
How does POD partner get the file?
File URL passes as line-item property on order. Partner reads via Shopify Order API, downloads file, prints. Zero manual handoff.
Best app for embroidery file upload (DST)?
Print It My Way Pro supports DST, EXP, PES natively. Bold + Customily focus on photo formats; less embroidery support.
Handle copyrighted uploads legally?
Terms checkbox before upload + automated screening for known IP + DMCA safe harbor registration + manual review queue for high-value orders. Print It My Way includes all four.
Where are uploaded files stored?
Print It My Way: AWS S3, encrypted, US default (EU on Unlimited). 90-day retention post-fulfillment. GDPR-compliant deletion on request.
Related setup guides
- Photo Upload Setup (Photo Products)
- Accepted File Formats Reference
- Handling Copyright on Uploads
- Adding Image Upload Fields
File upload on Shopify — done right
Print It My Way Pro ($13.99/mo) accepts all major formats (JPG, PNG, HEIC, SVG, AI, EPS, PDF, DST, EXP, PES). POD partner sync included.
Install Print It My Way