Skip to content

Commit

Permalink
Added Tus-Temp-Filename header to responses
Browse files Browse the repository at this point in the history
  • Loading branch information
matthoskins1980 committed Jun 12, 2016
1 parent c2458cc commit 5e2e637
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 3 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,10 @@ tm = tus_manager(app, upload_url='/file-upload', upload_folder='uploads/')

tus_manager() registers two new url endpoint /file-upload and /file-upload/\<resource\>. You can not define views for those
urls in your app. Simply use any tus client and point it to /file-upload as the endpoint

```
Building (local instructions for me
```

1. python setup.py sdist
2. twine upload <filecreated>
11 changes: 10 additions & 1 deletion demo.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
from flask import Flask, render_template, send_from_directory
from flask import Flask, render_template, send_from_directory, current_app
from flask.ext.tus import tus_manager

import os

app = Flask(__name__)
tm = tus_manager(app, upload_url='/file-upload')

@tm.upload_file_handler
def upload_file_hander( upload_file_path, filename ):
app = current_app

app.logger.info( "doing something cool with {}, {}".format( upload_file_path, filename))
return filename


@app.route("/")
def demo():
return render_template("demo.html", upload_url = tm.upload_url )
Expand Down
15 changes: 14 additions & 1 deletion flask_tus.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,17 @@ def init_app(self, app, upload_url='/file-upload', upload_folder='uploads/', ove
self.tus_max_file_size = 4294967296 # 4GByte
self.file_overwrite = overwrite
self.upload_finish_cb = upload_finish_cb
self.upload_file_handler_cb = None

# register the two file upload endpoints
app.add_url_rule(self.upload_url, 'file-upload', self.tus_file_upload, methods=['OPTIONS', 'POST', 'GET'])
app.add_url_rule('{}/<resource_id>'.format( self.upload_url ), 'file-upload-chunk', self.tus_file_upload_chunk, methods=['HEAD', 'PATCH', 'DELETE'])


def upload_file_handler( self, callback ):
self.upload_file_handler_cb = callback
return callback

# handle redis server connection
def redis_connect(self):
return redis.Redis()
Expand All @@ -47,6 +53,7 @@ def redis_connection(self):
return ctx.tus_redis

def tus_file_upload(self):

response = make_response("", 200)

if request.method == 'GET':
Expand Down Expand Up @@ -113,6 +120,7 @@ def tus_file_upload(self):

response.status_code = 201
response.headers['Location'] = '{}/{}/{}'.format(request.url_root, self.upload_url, resource_id)
response.headers['Tus-Temp-Filename'] = resource_id
response.autocorrect_location_header = False

else:
Expand Down Expand Up @@ -159,6 +167,7 @@ def tus_file_upload_chunk(self, resource_id):
if request.method == 'PATCH':
filename = self.redis_connection.get("file-uploads/{}/filename".format( resource_id ))
if filename is None or os.path.lexists( upload_file_path ) is False:
self.app.logger.info( "PATCH sent for resource_id that does not exist. {}".format( resource_id))
response.status_code = 410
return response

Expand All @@ -181,9 +190,13 @@ def tus_file_upload_chunk(self, resource_id):

new_offset = self.redis_connection.incrby( "file-uploads/{}/offset".format( resource_id ), chunk_size)
response.headers['Upload-Offset'] = new_offset
response.headers['Tus-Temp-Filename'] = resource_id

if file_size == new_offset: # file transfer complete, rename from resource id to actual filename
os.rename( upload_file_path, os.path.join( self.upload_folder, filename ))
if self.upload_file_handler_cb is None:
os.rename( upload_file_path, os.path.join( self.upload_folder, filename ))
else:
filename = self.upload_file_handler_cb( upload_file_path, filename )

if self.upload_finish_cb is not None:
self.upload_finish_cb()
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

setup(
name='Flask-Tus',
version='0.5.2',
version='0.6.0',
url='http://github.com/matthoskins1980/Flask-Tus/',
license='MIT',
author='Matt Hoskins',
Expand Down

0 comments on commit 5e2e637

Please sign in to comment.