##// END OF EJS Templates
use ?download=1 to trigger download in /files/...
Min RK -
Show More
@@ -24,7 +24,10 b' class FilesHandler(IPythonHandler):'
24
24
25 path, name = os.path.split(path)
25 path, name = os.path.split(path)
26 model = cm.get_model(name, path)
26 model = cm.get_model(name, path)
27
27
28 if self.get_argument("download", False):
29 self.set_header('Content-Disposition','attachment; filename="%s"' % name)
30
28 if model['type'] == 'notebook':
31 if model['type'] == 'notebook':
29 self.set_header('Content-Type', 'application/json')
32 self.set_header('Content-Type', 'application/json')
30 else:
33 else:
@@ -32,8 +35,6 b' class FilesHandler(IPythonHandler):'
32 if cur_mime is not None:
35 if cur_mime is not None:
33 self.set_header('Content-Type', cur_mime)
36 self.set_header('Content-Type', cur_mime)
34
37
35 self.set_header('Content-Disposition','attachment; filename="%s"' % name)
36
37 if model['format'] == 'base64':
38 if model['format'] == 'base64':
38 b64_bytes = model['content'].encode('ascii')
39 b64_bytes = model['content'].encode('ascii')
39 self.write(base64.decodestring(b64_bytes))
40 self.write(base64.decodestring(b64_bytes))
@@ -112,7 +112,7 b' define(['
112 notebook_path,
112 notebook_path,
113 notebook_name
113 notebook_name
114 );
114 );
115 window.open(url);
115 window.open(url + '?download=1');
116 });
116 });
117
117
118 this.element.find('#print_preview').click(function () {
118 this.element.find('#print_preview').click(function () {
@@ -98,7 +98,23 b' class FilesTest(NotebookTestBase):'
98 self.assertEqual(r.status_code, 200)
98 self.assertEqual(r.status_code, 200)
99 self.assertEqual(r.headers['content-type'], 'text/plain')
99 self.assertEqual(r.headers['content-type'], 'text/plain')
100 self.assertEqual(r.text, 'foobar')
100 self.assertEqual(r.text, 'foobar')
101
102 def test_download(self):
103 nbdir = self.notebook_dir.name
104 base = self.base_url()
105
106 text = 'hello'
107 with open(pjoin(nbdir, 'test.txt'), 'w') as f:
108 f.write(text)
109
110 r = requests.get(url_path_join(base, 'files', 'test.txt'))
111 disposition = r.headers.get('Content-Disposition', '')
112 self.assertNotIn('attachment', disposition)
101
113
114 r = requests.get(url_path_join(base, 'files', 'test.txt') + '?download=1')
115 disposition = r.headers.get('Content-Disposition', '')
116 self.assertIn('attachment', disposition)
117 self.assertIn('filename="test.txt"', disposition)
102
118
103 def test_old_files_redirect(self):
119 def test_old_files_redirect(self):
104 """pre-2.0 'files/' prefixed links are properly redirected"""
120 """pre-2.0 'files/' prefixed links are properly redirected"""
General Comments 0
You need to be logged in to leave comments. Login now