Skip to content

Commit e5be2cf

Browse files
committed
Post new dataset files as JSON instead of formdata
1 parent 8110b72 commit e5be2cf

File tree

2 files changed

+40
-23
lines changed

2 files changed

+40
-23
lines changed

cesium_app/handlers/dataset.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,40 @@
1010
import os
1111
from os.path import join as pjoin
1212
import uuid
13+
import base64
1314

1415

1516
class DatasetHandler(BaseHandler):
1617
@auth_or_token
1718
def post(self):
18-
if not 'tarFile' in self.request.files:
19+
data = self.get_json()
20+
if not 'tarFile' in data:
1921
return self.error('No tar file uploaded')
2022

21-
zipfile = self.request.files['tarFile'][0]
23+
zipfile = data['tarFile']
2224

23-
if zipfile.filename == '':
25+
if zipfile['name'] == '':
2426
return self.error('Empty tar file uploaded')
2527

26-
dataset_name = self.get_argument('datasetName')
27-
project_id = self.get_argument('projectID')
28+
dataset_name = data['datasetName']
29+
project_id = data['projectID']
2830

2931
zipfile_name = (str(uuid.uuid4()) + "_" +
30-
util.secure_filename(zipfile.filename))
32+
util.secure_filename(zipfile['name']))
3133
zipfile_path = pjoin(self.cfg['paths:upload_folder'], zipfile_name)
3234

3335
with open(zipfile_path, 'wb') as f:
34-
f.write(zipfile['body'])
36+
f.write(base64.b64decode(
37+
zipfile['body'].replace('data:application/gzip;base64,', '')))
3538

3639
# Header file is optional for unlabled data w/o metafeatures
37-
if 'headerFile' in self.request.files:
38-
headerfile = self.request.files['headerFile'][0]
40+
if 'headerFile' in data:
41+
headerfile = data['headerFile']
3942
headerfile_name = (str(uuid.uuid4()) + "_" +
40-
util.secure_filename(headerfile.filename))
43+
util.secure_filename(headerfile['name']))
4144
headerfile_path = pjoin(self.cfg['paths:upload_folder'], headerfile_name)
4245

43-
with open(headerfile_path, 'wb') as f:
46+
with open(headerfile_path, 'w') as f:
4447
f.write(headerfile['body'])
4548

4649
else:

static/js/actions.js

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -186,26 +186,40 @@ export function deleteProject(id) {
186186

187187

188188
export function uploadDataset(form) {
189-
const formData = new FormData();
190189

191-
for (const key in form) {
192-
if (form[key] && objectType(form[key][0]) === 'File') {
193-
formData.append(key, form[key][0]);
194-
} else {
195-
formData.append(key, form[key]);
196-
}
190+
function fileReaderPromise(form, fileName, binary = false){
191+
return new Promise(resolve => {
192+
var filereader = new FileReader();
193+
if (binary) {
194+
filereader.readAsDataURL(form[fileName][0]);
195+
} else {
196+
filereader.readAsText(form[fileName][0]);
197+
}
198+
filereader.onloadend = () => resolve({ body: filereader.result,
199+
name: form[fileName][0].name });
200+
});
197201
}
198202

199203
return dispatch =>
200204
promiseAction(
201205
dispatch,
202206
UPLOAD_DATASET,
203207

204-
fetch('/dataset', {
205-
credentials: 'same-origin',
206-
method: 'POST',
207-
body: formData
208-
})
208+
Promise.all([fileReaderPromise(form, 'headerFile'),
209+
fileReaderPromise(form, 'tarFile', true)])
210+
.then(([headerData, tarData]) => {
211+
form['headerFile'] = headerData;
212+
form['tarFile'] = tarData;
213+
214+
return fetch('/dataset', {
215+
credentials: 'same-origin',
216+
method: 'POST',
217+
body: JSON.stringify(form),
218+
headers: new Headers({
219+
'Content-Type': 'application/json'
220+
})
221+
})
222+
})
209223
.then(response => response.json())
210224
.then((json) => {
211225
if (json.status == 'success') {

0 commit comments

Comments
 (0)