vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
39 lines (38 loc) • 1.25 kB
JavaScript
import { Message as o } from "../../../Message/index.mjs";
const y = ({ uid: t, uploadUrl: a, selectedFile: f, headers: p = {}, data: c = {}, name: l = "file", onSuccess: T, onError: r, onProgress: u }) => {
if (!a)
return r(t, "无效上传地址"), { cancel: () => {
} };
const s = new XMLHttpRequest(), n = new FormData();
n.append(l, f);
for (const e of Object.keys(c))
n.append(e, c[e]);
s.open("POST", a, !0);
for (const e of Object.keys(p))
s.setRequestHeader(e, p[e]);
return s.upload.onprogress = (e) => {
if (e.lengthComputable) {
const x = e.loaded / e.total * 100;
u(t, x);
}
}, s.onload = () => {
if (s.status >= 200 && s.status < 300)
try {
const e = JSON.parse(s.responseText);
e.error || e.err ? (r(t, e), o.error("上传失败:服务器返回错误!")) : T(t, e);
} catch {
r(t, s.responseText), o.error("上传失败:解析响应错误!");
}
else
r(t, s.responseText), o.error(`上传失败:HTTP${s.status}!`);
}, s.onerror = () => {
r(t, s.responseText), o.error("上传失败:请求错误!");
}, s.send(n), {
cancel() {
s.abort(), o.success("上传已取消");
}
};
};
export {
y as UploadRequest
};