Transcript
Page 2: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

About Me

Page 3: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

I Open Source

Page 4: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Page 5: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Page 6: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Page 7: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Nodecopter.com

Page 8: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Implemented file upload?

Page 9: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

The Case For Resumable File

Uploads

Page 10: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Content is king

Page 11: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

User Generated Content

Page 12: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

If content is king, you should care about

acquiring it

Page 13: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Getting harder

Page 14: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

HD cameras everywhere

HD Cameras

Hugefile sizes

Example: 45 second video on iPhone 5 = ~100 MB

Page 15: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Slow uplinks

• Wifi: ~2.5min (~5000kbsp)

• LTE: ~10 min (~1300 kbsp)

• 3G: ~40min (at ~330 kbps)

• Edge: ~68 min (at 200 kbps)

Average upload speeds for 100 MB** sources: Apple Network Link Conditioner and http://www.lte-anbieter.info/presse/12/analyse-speed-lte.html

Page 16: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Unreliable Networks

Page 17: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

99.9 / 100 MB upload, 2 seconds remaining

error: connection lost, please upload again!

Page 18: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

resumable file uploading

Page 19: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

possible today, but way too hard

Page 20: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

HTML Uploads

Page 21: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Form-based File Upload in HTML

1 <form2 action="/"3 method="post"4 enctype="multipart/form-data"5 >6 <input name="upload" type="file" accept="image/*">7 <input type="submit" value="Upload File">8 </form>

RFC1867 - Nov 25, 1995

Page 22: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

multipart/form-data

POST / HTTP/1.1Host: localhost:8080Content-Type: multipart/form-data; boundary=---------------------------1735847702826983019589436949Content-Length: 2936447

-----------------------------1735847702826983019589436949Content-Disposition: form-data; name="upload"; filename="gopher.png"Content-Type: image/png

PNG

IHDR�7/iCCPICC Profilec``2ptqre``�+)rwR�R`��� ``�\\�yy |��<more data>-----------------------------32473823211195181971638105612--

Page 23: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Missing Features

• Progress indication

• Background Uploads

• Selecting multiple files

• File size limits

• Drag & Drop

• etc.

Page 24: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Page 25: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Page 26: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

HTML5

• File API + XMLHttpRequest2

• Background Uploads, Drag & Drop, Reading file data in JS, Selecting Multiple Files, Upload Progress, etc.

• Available in Chrome, Firefox, Safari, Opera, IE 10

Page 27: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

How to resume a http upload*?

* ideally in a RESTful way

Page 28: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

not defined : /

Page 29: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

<rant>

rfc2616 is a bad place to look for wisdom

Page 30: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

GET / HTTP/1.1Host: foo.example.comAccept: text/plain;q=0.1,text/*;q=1,*/*;q=0Range: bytes=8-

Page 31: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

GET / HTTP / 1 . 1Accept: text/plain ; q = 0 .1 ,,,, ,, ,,, ,,, ,,, ,,, ,,,,,,,, ,,,, ,, text/* ; q = 1 . 00 Range: bytes = 8 -Host: foo.example.com Accept: , */* ; q = 0 ,

Page 32: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

</rant>

Page 33: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Prior Art

Page 34: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

YouTube API v2.0 – Resumable Uploads

• Based on Google Gears protocol

• Invents new http code 308 Resume Incomplete

• Uses PUT to “query” upload status

• Abuses “Content-Range”, “Range” headers

• Not meant for interoperability

Page 35: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Amazon S3

• Multipart API

• Complicated, hard to implement for clients, hard for servers

• 5 MB chunk size limit

• REST? What’s REST?

• Not meant for interoperability

Page 36: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

resumable.js

• Uses multipart/form-data, not RESTful

• Requires lots of small chunk requests (ovhead)

• Poorly specified protocol

• Still: Probably best open source solution out there right now

Page 37: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

the tus resumable upload protocol

Page 38: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

simple, open, freehttps://github.com/tus/

tus-resumable-upload-protocol

v0.2.1 released 3 days go

Page 39: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

POST /files HTTP/1.1Host: tus.example.orgContent-Length: 0Final-Length: 100

HTTP/1.1 201 CreatedLocation: http://tus.example.org/files/1

Page 40: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

PATCH /files/1 HTTP/1.1Host: tus.example.orgContent-Length: 100Offset: 0

[file data]

HTTP/1.1 200 Ok

Page 41: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

HEAD /files/1 HTTP/1.1Host: tus.example.org

HTTP/1.1 200 OkOffset: 70

Page 42: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

PATCH /files/1 HTTP/1.1Host: tus.example.orgContent-Length: 30Offset: 70

[remaining file data]

HTTP/1.1 200 Ok

Page 43: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

clients and servers for all platforms

Page 44: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

clients and servers

• tusd - reference server, implemented in Go

• brewtus - node.js server implemented by Naren Venkataraman

• tus-jquery-client, JS client using jQuery

• tus-ios-client, native objective C client library

• tuspy, python client by Naren Venkataraman

http://www.tus.io/implementations.html

Page 45: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

upload acceleration

Page 46: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

checksums, meta data, streams, etc.

Page 47: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

demo

Page 48: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Future

• Release v1.0 of protocol

• Submit as RFC

• Adoption by all majors frameworks, libraries and products

Page 49: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

Page 50: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Page 51: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

@felixgefelixge

tus.io

Page 52: tus.io – Resumable file uploads for web and mobile apps by Felix Geisendörfer

felixge

Questions?