UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.13 kB
{"version":3,"file":"ajax.mjs","sources":["../../../../../../packages/components/upload/src/ajax.ts"],"sourcesContent":["import { isNil } from 'lodash-unified'\nimport { isArray, throwError } from '@element-plus/utils'\n\nimport type {\n UploadProgressEvent,\n UploadRequestHandler,\n UploadRequestOptions,\n} from './upload'\n\nconst SCOPE = 'ElUpload'\n\nexport class UploadAjaxError extends Error {\n name = 'UploadAjaxError'\n status: number\n method: string\n url: string\n\n constructor(message: string, status: number, method: string, url: string) {\n super(message)\n this.status = status\n this.method = method\n this.url = url\n }\n}\n\nfunction getError(\n action: string,\n option: UploadRequestOptions,\n xhr: XMLHttpRequest\n) {\n let msg: string\n if (xhr.response) {\n msg = `${xhr.response.error || xhr.response}`\n } else if (xhr.responseText) {\n msg = `${xhr.responseText}`\n } else {\n msg = `fail to ${option.method} ${action} ${xhr.status}`\n }\n\n return new UploadAjaxError(msg, xhr.status, option.method, action)\n}\n\nfunction getBody(xhr: XMLHttpRequest): XMLHttpRequestResponseType {\n const text = xhr.responseText || xhr.response\n if (!text) {\n return text\n }\n\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nexport const ajaxUpload: UploadRequestHandler = (option) => {\n if (typeof XMLHttpRequest === 'undefined')\n throwError(SCOPE, 'XMLHttpRequest is undefined')\n\n const xhr = new XMLHttpRequest()\n const action = option.action\n\n if (xhr.upload) {\n xhr.upload.addEventListener('progress', (evt) => {\n const progressEvt = evt as UploadProgressEvent\n progressEvt.percent = evt.total > 0 ? (evt.loaded / evt.total) * 100 : 0\n option.onProgress(progressEvt)\n })\n }\n\n const formData = new FormData()\n if (option.data) {\n for (const [key, value] of Object.entries(option.data)) {\n if (isArray(value) && value.length) formData.append(key, ...value)\n else formData.append(key, value)\n }\n }\n formData.append(option.filename, option.file, option.file.name)\n\n xhr.addEventListener('error', () => {\n option.onError(getError(action, option, xhr))\n })\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError(getError(action, option, xhr))\n }\n option.onSuccess(getBody(xhr))\n })\n\n xhr.open(option.method, action, true)\n\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true\n }\n\n const headers = option.headers || {}\n if (headers instanceof Headers) {\n headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n } else {\n for (const [key, value] of Object.entries(headers)) {\n if (isNil(value)) continue\n xhr.setRequestHeader(key, String(value))\n }\n }\n\n xhr.send(formData)\n return xhr\n}\n"],"names":[],"mappings":"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"}