diff --git a/frontend/packages/core/src/utils/fetch.ts b/frontend/packages/core/src/utils/fetch.ts index 244ff0a195a2308d0d5fca7e6f502338a2453f97..b48b684a4d307a0efc447cbca976ae141a24d324 100644 --- a/frontend/packages/core/src/utils/fetch.ts +++ b/frontend/packages/core/src/utils/fetch.ts @@ -80,44 +80,50 @@ export async function fetcher(url: string, options?: RequestInit): } let response: Data | T; - try { - if (res.headers.get('content-type')?.includes('application/json')) { + if (res.headers.get('content-type')?.includes('application/json')) { + try { response = await res.json(); - if (response && 'status' in response) { - if (response.status !== 0) { - const t = await logErrorAndReturnT(response); - throw new Error((response as ErrorData).msg || t('errors:error')); - } else { - return (response as SuccessData).data; - } - } - return response; - } else { - const data = await res.blob(); - const disposition = res.headers.get('Content-Disposition'); - // support safari - if (!data.arrayBuffer) { - data.arrayBuffer = async () => - new Promise((resolve, reject) => { - const fileReader = new FileReader(); - fileReader.addEventListener('load', e => - e.target ? resolve(e.target.result as ArrayBuffer) : reject() - ); - fileReader.readAsArrayBuffer(data); - }); + } catch (e) { + const t = await logErrorAndReturnT(e); + throw new Error(t('errors:parse-error')); + } + if (response && 'status' in response) { + if (response.status !== 0) { + const t = await logErrorAndReturnT(response); + throw new Error((response as ErrorData).msg || t('errors:error')); + } else { + return (response as SuccessData).data; } - let filename: string | null = null; - if (disposition && disposition.indexOf('attachment') !== -1) { - const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(disposition); - if (matches != null && matches[1]) { - filename = matches[1].replace(/['"]/g, ''); - } + } + return response; + } else { + let data: Blob; + try { + data = await res.blob(); + } catch (e) { + const t = await logErrorAndReturnT(e); + throw new Error(t('errors:parse-error')); + } + const disposition = res.headers.get('Content-Disposition'); + // support safari + if (!data.arrayBuffer) { + data.arrayBuffer = async () => + new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.addEventListener('load', e => + e.target ? resolve(e.target.result as ArrayBuffer) : reject() + ); + fileReader.readAsArrayBuffer(data); + }); + } + let filename: string | null = null; + if (disposition && disposition.indexOf('attachment') !== -1) { + const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(disposition); + if (matches != null && matches[1]) { + filename = matches[1].replace(/['"]/g, ''); } - return {data, type: res.headers.get('Content-Type'), filename}; } - } catch (e) { - const t = await logErrorAndReturnT(e); - throw new Error(t('errors:parse-error')); + return {data, type: res.headers.get('Content-Type'), filename}; } } diff --git a/visualdl/server/app.py b/visualdl/server/app.py index 29ae6d26e9ffc82984d51074e8dd89145a94ea8b..ab939814e924ee7f72fb1aee86306333d5022e11 100644 --- a/visualdl/server/app.py +++ b/visualdl/server/app.py @@ -69,6 +69,12 @@ def create_app(args): public_path = args.public_path api_path = public_path + '/api' + def append_query_string(url): + query_string = '' + if request.query_string: + query_string = '?' + request.query_string.decode() + return url + query_string + @babel.localeselector def get_locale(): lang = args.language @@ -87,7 +93,7 @@ def create_app(args): @app.route('/') def base(): - return redirect(public_path, code=302) + return redirect(append_query_string(public_path), code=302) @app.route('/favicon.ico') def favicon(): @@ -98,10 +104,7 @@ def create_app(args): @app.route(public_path + '/') def index(): - query_string = '' - if request.query_string: - query_string = '?' + request.query_string.decode() - return redirect(public_path + '/index' + query_string, code=302) + return redirect(append_query_string(public_path + '/index'), code=302) @app.route(public_path + '/') def serve_static(filename):