1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.default = undefined;
|
5 |
|
6 | var _extends2 = require('babel-runtime/helpers/extends');
|
7 |
|
8 | var _extends3 = _interopRequireDefault(_extends2);
|
9 |
|
10 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
11 |
|
12 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
13 |
|
14 | var _util = require('../../util');
|
15 |
|
16 | var _util2 = require('../util');
|
17 |
|
18 | var _request = require('./request');
|
19 |
|
20 | var _request2 = _interopRequireDefault(_request);
|
21 |
|
22 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23 |
|
24 | var noop = _util.func.noop;
|
25 |
|
26 | var Uploader = function () {
|
27 | function Uploader(options) {
|
28 | (0, _classCallCheck3.default)(this, Uploader);
|
29 |
|
30 | this.options = (0, _extends3.default)({
|
31 | beforeUpload: noop,
|
32 | onProgress: noop,
|
33 | onSuccess: noop,
|
34 | onError: noop,
|
35 | data: {},
|
36 | name: 'file',
|
37 | method: 'post'
|
38 | }, options);
|
39 | this.reqs = {};
|
40 | }
|
41 |
|
42 | Uploader.prototype.setOptions = function setOptions(options) {
|
43 | (0, _extends3.default)(this.options, options);
|
44 | };
|
45 |
|
46 | Uploader.prototype.startUpload = function startUpload(files) {
|
47 | var _this = this;
|
48 |
|
49 | var filesArr = files.length ? Array.prototype.slice.call(files) : [files];
|
50 | filesArr.forEach(function (file) {
|
51 | file.uid = file.uid || (0, _util2.uid)();
|
52 | _this.upload(file);
|
53 | });
|
54 | };
|
55 |
|
56 | Uploader.prototype.abort = function abort(file) {
|
57 | var reqs = this.reqs;
|
58 |
|
59 | if (file) {
|
60 | var _uid = file;
|
61 | if (file && file.uid) {
|
62 | _uid = file.uid;
|
63 | }
|
64 | if (reqs[_uid]) {
|
65 | reqs[_uid].abort();
|
66 | delete reqs[_uid];
|
67 | }
|
68 | } else {
|
69 | Object.keys(reqs).forEach(function (uid) {
|
70 | if (reqs[uid] && reqs[uid].abort) {
|
71 | reqs[uid].abort();
|
72 | }
|
73 | delete reqs[uid];
|
74 | });
|
75 | }
|
76 | };
|
77 |
|
78 | Uploader.prototype.upload = function upload(file) {
|
79 | var _this2 = this;
|
80 |
|
81 | var _options = this.options,
|
82 | beforeUpload = _options.beforeUpload,
|
83 | action = _options.action,
|
84 | name = _options.name,
|
85 | headers = _options.headers,
|
86 | timeout = _options.timeout,
|
87 | withCredentials = _options.withCredentials,
|
88 | method = _options.method,
|
89 | data = _options.data;
|
90 |
|
91 | var before = beforeUpload(file, {
|
92 | action: action,
|
93 | name: name,
|
94 | headers: headers,
|
95 | timeout: timeout,
|
96 | withCredentials: withCredentials,
|
97 | method: method,
|
98 | data: data
|
99 | });
|
100 |
|
101 | _util.func.promiseCall(before, function (options) {
|
102 | if (options === false) {
|
103 | var err = new Error(_util2.errorCode.BEFOREUPLOAD_REJECT);
|
104 | err.code = _util2.errorCode.BEFOREUPLOAD_REJECT;
|
105 | return _this2.options.onError(err, null, file);
|
106 | }
|
107 | _this2.post(file, _util.obj.isPlainObject(options) ? options : undefined);
|
108 | }, function (error) {
|
109 | var err = void 0;
|
110 | if (error) {
|
111 | err = error;
|
112 | } else {
|
113 | err = new Error(_util2.errorCode.BEFOREUPLOAD_REJECT);
|
114 | err.code = _util2.errorCode.BEFOREUPLOAD_REJECT;
|
115 | }
|
116 | _this2.options.onError(err, null, file);
|
117 | });
|
118 | };
|
119 |
|
120 | Uploader.prototype.post = function post(file) {
|
121 | var _this3 = this;
|
122 |
|
123 | var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
124 |
|
125 | var requestOptions = (0, _extends3.default)({}, this.options, options);
|
126 | var action = requestOptions.action,
|
127 | name = requestOptions.name,
|
128 | headers = requestOptions.headers,
|
129 | timeout = requestOptions.timeout,
|
130 | withCredentials = requestOptions.withCredentials,
|
131 | _onProgress = requestOptions.onProgress,
|
132 | _onSuccess = requestOptions.onSuccess,
|
133 | _onError = requestOptions.onError,
|
134 | method = requestOptions.method;
|
135 |
|
136 |
|
137 | var data = requestOptions.data;
|
138 | if (typeof data === 'function') {
|
139 | data = data(file);
|
140 | }
|
141 |
|
142 | var uid = file.uid;
|
143 |
|
144 |
|
145 | var request = typeof requestOptions.request === 'function' ? requestOptions.request : _request2.default;
|
146 | this.reqs[uid] = request({
|
147 | action: action,
|
148 | filename: name,
|
149 | file: file,
|
150 | data: data,
|
151 | timeout: timeout,
|
152 | headers: headers,
|
153 | withCredentials: withCredentials,
|
154 | method: method,
|
155 | onProgress: function onProgress(e) {
|
156 | _onProgress(e, file);
|
157 | },
|
158 | onSuccess: function onSuccess(ret) {
|
159 | delete _this3.reqs[uid];
|
160 | _onSuccess(ret, file);
|
161 | },
|
162 | onError: function onError(err, ret) {
|
163 | delete _this3.reqs[uid];
|
164 | _onError(err, ret, file);
|
165 | }
|
166 | });
|
167 | };
|
168 |
|
169 | return Uploader;
|
170 | }();
|
171 |
|
172 | exports.default = Uploader;
|
173 | module.exports = exports['default']; |
\ | No newline at end of file |