diff --git a/containers.py b/containers.py
index 6fc5be2f8a1babd656406ea01264107933e18952..8e2d68ee5259996e7229eb3fb1b8bc1f2ae5e885 100644
--- a/containers.py
+++ b/containers.py
@@ -195,11 +195,14 @@ class Container(base.RequestHandler):
             self.abort(404, 'no such file')
         filename = file_info['name'] + file_info['ext']
         filepath = os.path.join(self.app.config['data_path'], str(_id)[-3:] + '/' + str(_id), filename)
-        ticket = util.download_ticket('single', filepath, filename, file_info['size'])
-        tkt_id = self.app.db.downloads.insert(ticket)
         if self.request.method == 'GET':
-            self.redirect_to('download', _abort=True, ticket=tkt_id)
-        return {'url': self.uri_for('download', _full=True, ticket=tkt_id)}
+            self.response.app_iter = open(filepath, 'rb')
+            self.response.headers['Content-Length'] = str(file_info['size']) # must be set after setting app_iter
+            self.response.headers['Content-Type'] = 'application/octet-stream'
+        else:
+            ticket = util.download_ticket('single', filepath, filename, file_info['size'])
+            tkt_id = self.app.db.downloads.insert(ticket)
+            return {'url': self.uri_for('download', _full=True, ticket=tkt_id)}
 
     def put_file(self, cid=None):
         """
@@ -328,12 +331,14 @@ class Container(base.RequestHandler):
                 break
         else:
             self.abort(404, 'no such file')
-
-        ticket = util.download_ticket('single', fpath, fname, a_info['size'])
-        tkt_id = self.app.db.downloads.insert(ticket)
         if self.request.method == 'GET':
-            self.redirect_to('download', _abort=True, ticket=tkt_id)
-        return {'url': self.uri_for('download', _full=True, ticket=tkt_id)}
+            self.response.app_iter = open(fpath, 'rb')
+            self.response.headers['Content-Length'] = str(a_info['size']) # must be set after setting app_iter
+            self.response.headers['Content-Type'] = 'application/octet-stream'
+        else:
+            ticket = util.download_ticket('single', fpath, fname, a_info['size'])
+            tkt_id = self.app.db.downloads.insert(ticket)
+            return {'url': self.uri_for('download', _full=True, ticket=tkt_id)}
 
     def delete_attachment(self, cid):
         """Delete one attachment."""