getFileBlob.js

import { __assign } from "tslib";
import { isBlob } from 'ut2';
import ajax from './ajax';
var SuccessResponseStatus = [200, 304];
/**
 * 获取文件 Blob 。
 *
 * @static
 * @alias module:Other.getFileBlob
 * @since 4.21.0
 * @param {string | Blob} file 文件地址或对象。
 * @param {AjaxOptions} [ajaxOptions] ajax 请求配置项,当传入的图片为字符串时才会触发请求。
 * @returns {Promise<Blob>} 文件 Blob 。
 * @example
 *
 * getFileBlob(file).then((blob)=>{
 *    // do something
 * });
 *
 * getFileBlob('https://dummyimage.com/200x300').then((blob)=>{
 *   // do something
 * });
 */
function getFileBlob(file, ajaxOptions) {
    return new Promise(function (resolve, reject) {
        if (isBlob(file)) {
            resolve(file);
        }
        else {
            ajax(file, __assign({ responseType: 'blob' }, ajaxOptions))
                .then(function (ev) {
                // @ts-ignore
                // 进入 onload 表示 readyStatus 为 4 ,但是 status 不一定是 200 。
                var responseStatus = ev.target.status;
                if (SuccessResponseStatus.indexOf(responseStatus) !== -1) {
                    // @ts-ignore
                    resolve(ev.target.response);
                }
                else {
                    var err = new Error("The file does not support get requests, responseStatus ".concat(responseStatus, ", '").concat(file, "'."));
                    console.error(err);
                    reject(err);
                }
            })
                .catch(function (err) {
                console.error(new Error("Failed to request file. ".concat(err)));
                reject(err);
            });
        }
    });
}
export default getFileBlob;