async def siofu_start(sid, data): try: path = generate_uuid() filename = secure_filepath(data.get('name')) tmp_fs = Filesystem('tmpfs://') async with socketio.session(sid) as sess: sess['file_%d' % (data.get('id'))] = dict( data, path=path, name=filename, bytesLoaded=0, tmp_fs=tmp_fs, fh=tmp_fs.open(path, 'wb'), ) await socketio.emit( 'siofu_ready', { 'id': data.get('id'), 'name': None, }, room=sid, ) except Exception as e: logger.error(traceback.format_exc()) await socketio.emit('siofu_error', str(e), room=sid)
def upload_from_request(req, fnames): from flask import current_app data_fs = Filesystem(current_app.config['DATA_DIR']) data = dict() for fname in fnames: fh = req.files.get(fname) if fh: filename = secure_filepath(fh.filename) path = generate_uuid() with Filesystem('tmpfs://') as tmp_fs: with tmp_fs.open(path, 'w') as fw: fh.save(fw) data[fname] = '/'.join((organize_file_content(data_fs, tmp_fs, path), filename)) return data
async def download(sid, data): async with socketio.session(sid) as sess: config = sess['config'] # data_fs = Filesystem(config['DATA_DIR']) name = data.get('name') # TODO: hash based on url? # TODO: s3 bypass url = secure_url(data.get('url')) filename = secure_filepath(data.get('file')) await socketio.emit('download_queued', dict(name=name, filename=filename), room=sid) await download_with_progress_and_hash( sid=sid, data_fs=data_fs, name=name, url=url, path=generate_uuid(), filename=filename, )