文件or图片上传方法封装

2019-04-11  本文已影响0人  谢小逸
function UploadFile(options) {
    this.init(options)
}
UploadFile.prototype = {
    constructor: UploadFile,
    init: function(options) {
        if (options.domain) {
            document.domain = options.domain;
        }
        this.container = options.container ? document.querySelector(options.container) : document.body;
        this.iframe = document.createElement('iframe');
        let now = Date.now();
        let iframename = "iframe-" + now;
        this.iframe.id = iframename;
        this.iframe.name = iframename;
        this.iframe.style.display = 'none';
        if (this.iframe.contentWindow) {
            this.iframe.contentWindow.name = iframename;
        }

        this.container.appendChild(this.iframe);

        // 创建form
        this.form = document.createElement('form');
        this.form.method = 'post';
        this.form.action = options.url;
        this.form.encoding = 'multipart/form-data';
        this.form.name = 'form-' + now;
        this.form.target = iframeName;
        this.container.appendChild(this.form);

        //创建隐藏表单
        this.input = document.createElement('input');
        this.input.name = 'input-' + now;
        this.input.type = 'file';
        this.input.value = '';
        this.input.setAttribute('hideFocus', 'true');
        // input.accept = 'image/*';
        if (options.accept) {
            this.input.accept = options.accept;
        }
        this.form.appendChild(this.input);

        if (!options.noPosition) {
            this.fixedPosition();
        }
        var _this = this;
        // 上传中
        this.input.onchange = function() {
            if (!_this.input.files || !_this.input.files.length) {
                return;
            }
            _this.form.submit();
            if (options.onUploading) {
                options.onUploading();
            }
        }

        window[options.callback] = function(res) {
            if (options.onComplete) {
                options.onComplete(res);
            }
        }
    },
    fixedPosition: function() {
        var formStyle = this.form.style;
        formStyle.width = '100%';
        formStyle.height = '100%';
        formStyle.position = 'absolute';
        formStyle.left = '0';
        formStyle.top = '0';
        formStyle.opacity = '0';
        formStyle.filter = 'alpha(opacity=0)';
        var inputStyle = this.input.style;
        inputStyle.width = '100%';
        inputStyle.height = '100%';
    }
}

// Demo
// new UploadFile({
//  // 父级容器
//  container: '#test',
//  // 是否不适配位置
//  // noPosition: true,
//  // 接口地址
//  url: '',
//  // 跨域处理
//  domain: 'sina.com.cn',
//  // 上传的文件格式
//  accept: 'image/*',
//  // 接口返回的回调名称
//  callback: 'file_upload_callback',
//  // 开始上传
//  onUploading: function() {
//      console.log('start');
//  },
//  // 上传完成
//  onComplete: function(res) {
//      console.log(res)
//  }
// });

// new UploadFile({
//  // 父级容器
//  container: '.input-picture',
//  // 是否不适配位置
//  // noPosition: true,
//  // 接口地址
//  url: '',
//  // 跨域处理
//  domain: 'sina.com.cn',
//  // 上传的文件格式
//  accept: 'image/*',
//  // 接口返回的回调名称
//  callback: 'pic_upload_callback',
//  // 开始上传
//  onUploading: function() {
//      console.log('start');
//  },
//  // 上传完成
//  onComplete: function(res) {
//      console.log(res)
//  }
// });

上一篇下一篇

猜你喜欢

热点阅读