2013-03-17 09:47:14 +00:00
|
|
|
# tusd
|
2013-03-16 21:23:25 +00:00
|
|
|
|
2013-03-16 23:32:37 +00:00
|
|
|
A dedicated server for resumable file uploads written in Go.
|
2013-03-16 21:23:25 +00:00
|
|
|
|
2013-03-16 23:36:51 +00:00
|
|
|
Sounds interesting? Get notified when it's ready: http://tus.io/
|
|
|
|
|
2013-03-17 11:44:58 +00:00
|
|
|
## Mission
|
|
|
|
|
|
|
|
The tus mission is to make file uploading more reliable, faster and a better
|
|
|
|
user experience. We are dedicated to providing an open solution for this to
|
|
|
|
everybody.
|
|
|
|
|
2013-03-16 21:25:33 +00:00
|
|
|
## Roadmap
|
|
|
|
|
2013-03-17 11:06:53 +00:00
|
|
|
The initial goal for this project to come up with a good and simple solution
|
|
|
|
for resumable file uploads over http.
|
2013-03-16 21:23:25 +00:00
|
|
|
|
2013-03-16 23:49:13 +00:00
|
|
|
* Defining a good http API (in progress)
|
2013-03-16 23:39:08 +00:00
|
|
|
* Implementing a minimal / robust server for it
|
2013-03-16 21:25:33 +00:00
|
|
|
* Creating an HTML5 client
|
2013-03-16 21:23:25 +00:00
|
|
|
* Setting up an online demo
|
|
|
|
* Integrating Amazon S3 for storage
|
|
|
|
* Creating an iOS client
|
|
|
|
|
2013-03-17 11:06:53 +00:00
|
|
|
Future features will be based on [your
|
|
|
|
feedback](https://github.com/tus/tusd/issues/new). A few potential ideas:
|
|
|
|
|
|
|
|
* Alternative transfer mechanisms: FTP, UDP, E-Mail, etc.
|
|
|
|
* Security: Authentication Tokens, HTTPS, etc.
|
|
|
|
* Support for running tusd instances in a geographically distributed cluster
|
|
|
|
(reverse CDN)
|
|
|
|
* Alternative storage backends: Cloud Files, Dropbox, etc.
|
|
|
|
* More clients: Android, PhoneGap, etc.
|
2013-03-17 11:11:36 +00:00
|
|
|
* Service integrations: Zencoder, Encoding.com, Youtube, Vimeo, Facebook, etc.
|
|
|
|
* File meta data analysis
|
|
|
|
* Thumbnail generation
|
2013-03-17 11:06:53 +00:00
|
|
|
|
|
|
|
Once the project matures, we plan to offer a hosted service and support
|
2013-03-17 11:08:24 +00:00
|
|
|
contracts. However, all code will continue to be released as open source, and
|
|
|
|
you'll always be able to run your own deployments easily. There will be no bait
|
|
|
|
and switch.
|
2013-03-16 21:23:25 +00:00
|
|
|
|
2013-03-16 23:32:37 +00:00
|
|
|
## HTTP API
|
|
|
|
|
2013-03-17 09:41:17 +00:00
|
|
|
Below is the proposed HTTP API for resumable file uploading.
|
|
|
|
|
|
|
|
Prior art:
|
2013-03-17 09:40:12 +00:00
|
|
|
|
|
|
|
* [Google Drive - Upload Files](https://developers.google.com/drive/manage-uploads)
|
2013-03-17 10:29:08 +00:00
|
|
|
* [Resumable Media Uploads in the Google Data Protocol](https://developers.google.com/gdata/docs/resumable_upload) (deprecated)
|
|
|
|
* [ResumableHttpRequestsProposal from Gears](http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal) (deprecated)
|
2013-03-17 09:40:12 +00:00
|
|
|
|
2013-03-16 23:44:23 +00:00
|
|
|
### POST /files
|
2013-03-16 23:32:37 +00:00
|
|
|
|
2013-03-17 10:45:36 +00:00
|
|
|
Used to create a resumable file upload. You may send parts or all of your file
|
|
|
|
along with this request, but this is discouraged as you will not be able to
|
|
|
|
resume the request if something goes wrong.
|
|
|
|
|
|
|
|
**Request Example:**
|
2013-03-16 23:32:37 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
POST /files HTTP/1.1
|
|
|
|
Host: tus.example.com
|
|
|
|
Content-Length: 0
|
|
|
|
Content-Range: bytes */100
|
2013-03-17 10:41:45 +00:00
|
|
|
Content-Type: image/jpg
|
2013-03-16 23:32:37 +00:00
|
|
|
```
|
2013-03-17 10:45:36 +00:00
|
|
|
```
|
|
|
|
<empty body>
|
|
|
|
```
|
2013-03-16 23:32:37 +00:00
|
|
|
|
2013-03-17 10:45:36 +00:00
|
|
|
**Response Example:**
|
2013-03-16 23:32:37 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
HTTP/1.1 201 Created
|
|
|
|
Location: http://tus.example.com/files/123d3ebc995732b2
|
2013-03-17 10:41:45 +00:00
|
|
|
Content-Length: 0
|
2013-03-16 23:32:37 +00:00
|
|
|
```
|
|
|
|
|
2013-03-17 10:50:32 +00:00
|
|
|
The `Location` header returns the `<fileUrl>` to use for interacting with the
|
|
|
|
file upload.
|
|
|
|
|
|
|
|
### PUT \<fileUrl\>
|
2013-03-16 23:42:41 +00:00
|
|
|
|
2013-03-17 10:45:36 +00:00
|
|
|
**Request Example:**
|
2013-03-16 23:42:41 +00:00
|
|
|
```
|
|
|
|
PUT /files/123d3ebc995732b2 HTTP/1.1
|
|
|
|
Host: tus.example.com
|
|
|
|
Content-Length: 100
|
|
|
|
Content-Range: bytes 0-99/100
|
|
|
|
```
|
|
|
|
```
|
2013-03-17 10:45:36 +00:00
|
|
|
<bytes 0-99>
|
2013-03-16 23:42:41 +00:00
|
|
|
```
|
|
|
|
|
2013-03-17 10:45:36 +00:00
|
|
|
**Response Example:**
|
2013-03-16 23:42:41 +00:00
|
|
|
```
|
|
|
|
HTTP/1.1 200 Ok
|
|
|
|
```
|
|
|
|
|
2013-03-17 10:50:32 +00:00
|
|
|
### HEAD \<fileUrl\>
|
2013-03-17 10:41:45 +00:00
|
|
|
|
2013-03-17 10:50:32 +00:00
|
|
|
### GET \<fileUrl\>
|
2013-03-17 10:41:45 +00:00
|
|
|
|
|
|
|
Used to download an uploaded file.
|
2013-03-16 23:32:37 +00:00
|
|
|
|
|
|
|
**Request:**
|
2013-03-17 10:41:45 +00:00
|
|
|
|
2013-03-16 23:32:37 +00:00
|
|
|
```
|
2013-03-17 10:41:45 +00:00
|
|
|
GET /files/123d3ebc995732b2 HTTP/1.1
|
2013-03-16 23:32:37 +00:00
|
|
|
Host: tus.example.com
|
|
|
|
```
|
|
|
|
|
2013-03-17 10:41:45 +00:00
|
|
|
**Response:**
|
2013-03-16 23:32:37 +00:00
|
|
|
|
|
|
|
```
|
2013-03-17 10:41:45 +00:00
|
|
|
HTTP/1.1 200 Ok
|
|
|
|
Content-Length: 100
|
|
|
|
Content-Type: image/jpg
|
|
|
|
```
|
|
|
|
```
|
|
|
|
[file data]
|
2013-03-16 23:32:37 +00:00
|
|
|
```
|
|
|
|
|
2013-03-17 10:41:45 +00:00
|
|
|
|
2013-03-16 21:23:25 +00:00
|
|
|
## License
|
|
|
|
|
|
|
|
This project is licensed under the AGPL v3.
|
|
|
|
|
|
|
|
```
|
|
|
|
Copyright (C) 2013 Transloadit Limited
|
|
|
|
http://transloadit.com/
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU Affero General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU Affero General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
```
|