123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /* eslint-disable no-prototype-builtins */
- // 新鉴权 to open
- // import { getAuthorisation } from "./crypto";
- // function getStorage(key) {
- // const content = window.sessionStorage.getItem(key);
- // return content ? JSON.parse(content).value : null;
- // }
- // function getAuthorHeader(uri, method) {
- // const user = getStorage("user");
- // const infos = getAuthorisation(
- // {
- // token: getStorage("token"),
- // account: user && user["id"],
- // uri,
- // method
- // },
- // "token"
- // );
- // return {
- // Authorization: infos.Authorization,
- // time: infos.timestamp,
- // deviceId: user && user["id"],
- // domain: window.location.origin,
- // platform: "print-web"
- // };
- // }
- function getError(action, option, xhr) {
- let msg;
- if (xhr.response) {
- msg = `${xhr.response.error || xhr.response}`;
- } else if (xhr.responseText) {
- msg = `${xhr.responseText}`;
- } else {
- msg = `fail to post ${action} ${xhr.status}`;
- }
- const err = new Error(msg);
- err.status = xhr.status;
- err.method = "post";
- err.url = action;
- return err;
- }
- function getBody(xhr) {
- const text = xhr.responseText || xhr.response;
- if (!text) {
- return text;
- }
- try {
- return JSON.parse(text);
- } catch (e) {
- return text;
- }
- }
- export default function upload(option) {
- if (typeof XMLHttpRequest === "undefined") {
- return;
- }
- const xhr = new XMLHttpRequest();
- const action = option.action;
- if (xhr.upload) {
- xhr.upload.onprogress = function progress(e) {
- if (e.total > 0) {
- e.percent = (e.loaded / e.total) * 100;
- }
- option.onProgress(e);
- };
- }
- const formData = new FormData();
- if (option.data) {
- Object.keys(option.data).forEach(key => {
- formData.append(key, option.data[key]);
- });
- }
- formData.append(option.filename, option.file, option.file.name);
- xhr.onerror = function error(e) {
- option.onError(e);
- };
- xhr.onload = function onload() {
- if (xhr.status < 200 || xhr.status >= 300) {
- return option.onError(getError(action, option, xhr));
- }
- option.onSuccess(getBody(xhr));
- };
- xhr.open("post", action, true);
- if (option.withCredentials && "withCredentials" in xhr) {
- xhr.withCredentials = true;
- }
- let headers = option.headers || {};
- // const authorHeader = getAuthorHeader(action, "post");
- // for (let item in authorHeader) {
- // headers[item] = authorHeader[item];
- // }
- for (let item in headers) {
- if (headers.hasOwnProperty(item) && headers[item] !== null) {
- xhr.setRequestHeader(item, headers[item]);
- }
- }
- xhr.send(formData);
- return xhr;
- }
|