|
1 | 1 | 'use strict';
|
2 | 2 |
|
3 | 3 | // var debug = require('debug')('ali-oss:multipart');
|
4 |
| -// var fs = require('fs'); |
5 | 4 | var is = require('is-type-of');
|
6 |
| -// var destroy = require('destroy'); |
7 |
| -// var eoe = require('end-or-error'); |
8 | 5 | var util = require('util');
|
9 | 6 | var path = require('path');
|
10 | 7 | var mime = require('mime');
|
@@ -61,7 +58,7 @@ proto.multipartUpload = function* multipartUpload(name, file, options) {
|
61 | 58 | throw new Error('partSize must not be smaller than ' + minPartSize);
|
62 | 59 | }
|
63 | 60 |
|
64 |
| - var result = yield this._initMultipartUpload(name, options); |
| 61 | + var result = yield this.initMultipartUpload(name, options); |
65 | 62 | var uploadId = result.uploadId;
|
66 | 63 | var partSize = this._getPartSize(fileSize, options.partSize);
|
67 | 64 |
|
@@ -111,7 +108,7 @@ proto._resumeMultipart = function* _resumeMultipart(checkpoint, options) {
|
111 | 108 | size: pi.end - pi.start
|
112 | 109 | };
|
113 | 110 |
|
114 |
| - var result = yield self._uploadPart(name, uploadId, partNo, data); |
| 111 | + var result = yield self._uploadPart(name, uploadId, partNo, data, options); |
115 | 112 | doneParts.push({
|
116 | 113 | number: partNo,
|
117 | 114 | etag: result.res.headers.etag
|
@@ -163,169 +160,10 @@ proto._resumeMultipart = function* _resumeMultipart(checkpoint, options) {
|
163 | 160 | throw err;
|
164 | 161 | }
|
165 | 162 | }
|
166 |
| - return yield this._completeMultipartUpload(name, uploadId, doneParts, options); |
| 163 | + return yield this.completeMultipartUpload(name, uploadId, doneParts, options); |
167 | 164 | };
|
168 | 165 |
|
169 |
| -/** |
170 |
| - * List the on-going multipart uploads |
171 |
| - * https://help.aliyun.com/document_detail/31997.html |
172 |
| - * @param {Object} options |
173 |
| - * @return {Array} the multipart uploads |
174 |
| - */ |
175 |
| -proto.listUploads = function* listUploads(query, options) { |
176 |
| - options = options || {}; |
177 |
| - options.subres = 'uploads'; |
178 |
| - var params = this._objectRequestParams('GET', '', options) |
179 |
| - params.query = query; |
180 |
| - params.xmlResponse = true; |
181 |
| - params.successStatuses = [200]; |
182 |
| - |
183 |
| - var result = yield this.request(params); |
184 |
| - var uploads = result.data.Upload || []; |
185 |
| - if (!Array.isArray(uploads)) { |
186 |
| - uploads = [uploads]; |
187 |
| - } |
188 |
| - uploads = uploads.map(function (up) { |
189 |
| - return { |
190 |
| - name: up.Key, |
191 |
| - uploadId: up.UploadId, |
192 |
| - initiated: up.Initiated |
193 |
| - }; |
194 |
| - }); |
195 |
| - |
196 |
| - return { |
197 |
| - res: result.res, |
198 |
| - uploads: uploads, |
199 |
| - bucket: result.data.Bucket, |
200 |
| - nextKeyMarker: result.data.NextKeyMarker, |
201 |
| - nextUploadIdMarker: result.data.NextUploadIdMarker, |
202 |
| - isTruncated: result.data.IsTruncated === 'true' |
203 |
| - }; |
204 |
| -}; |
205 |
| - |
206 |
| -/** |
207 |
| - * Abort a multipart upload transaction |
208 |
| - * @param {String} name the object name |
209 |
| - * @param {String} uploadId the upload id |
210 |
| - * @param {Object} options |
211 |
| - */ |
212 |
| -proto.abortMultipartUpload = function* abortMultipartUpload(name, uploadId, options) { |
213 |
| - this.cancel(); |
214 |
| - options = options || {}; |
215 |
| - options.subres = {uploadId: uploadId}; |
216 |
| - var params = this._objectRequestParams('DELETE', name, options); |
217 |
| - params.successStatuses = [204]; |
218 |
| - |
219 |
| - var result = yield this.request(params); |
220 |
| - return { |
221 |
| - res: result.res |
222 |
| - }; |
223 |
| -}; |
224 |
| - |
225 |
| -/** |
226 |
| - * Initiate a multipart upload transaction |
227 |
| - * @param {String} name the object name |
228 |
| - * @param {Object} options |
229 |
| - * @return {String} upload id |
230 |
| - */ |
231 |
| -proto._initMultipartUpload = function* _initMultipartUpload(name, options) { |
232 |
| - options = options || {}; |
233 |
| - options.headers = options.headers || {}; |
234 |
| - this._convertMetaToHeaders(options.meta, options.headers); |
235 |
| - |
236 |
| - options.subres = 'uploads'; |
237 |
| - var params = this._objectRequestParams('POST', name, options); |
238 |
| - params.mime = options.mime; |
239 |
| - params.xmlResponse = true; |
240 |
| - params.successStatuses = [200]; |
241 |
| - |
242 |
| - var result = yield this.request(params); |
243 |
| - |
244 |
| - return { |
245 |
| - res: result.res, |
246 |
| - bucket: result.data.Bucket, |
247 |
| - name: result.data.Key, |
248 |
| - uploadId: result.data.UploadId |
249 |
| - }; |
250 |
| -}; |
251 | 166 |
|
252 |
| -/** |
253 |
| - * Upload a part in a multipart upload transaction |
254 |
| - * @param {String} name the object name |
255 |
| - * @param {String} uploadId the upload id |
256 |
| - * @param {Integer} partNo the part number |
257 |
| - * @param {Object} data the body data |
258 |
| - * @param {Object} options |
259 |
| - */ |
260 |
| -proto._uploadPart = function* _uploadPart(name, uploadId, partNo, data, options) { |
261 |
| - options = options || {}; |
262 |
| - options.headers = { |
263 |
| - 'Content-Length': data.size |
264 |
| - }; |
265 |
| - |
266 |
| - options.subres = { |
267 |
| - partNumber: partNo, |
268 |
| - uploadId: uploadId |
269 |
| - }; |
270 |
| - var params = this._objectRequestParams('PUT', name, options); |
271 |
| - params.mime = options.mime; |
272 |
| - params.stream = data.stream; |
273 |
| - params.successStatuses = [200]; |
274 |
| - |
275 |
| - var result = yield this.request(params); |
276 |
| - |
277 |
| - data.stream = null; |
278 |
| - params.stream = null; |
279 |
| - return { |
280 |
| - name: name, |
281 |
| - etag: result.res.headers.etag, |
282 |
| - res: result.res |
283 |
| - }; |
284 |
| -}; |
285 |
| - |
286 |
| -/** |
287 |
| - * Complete a multipart upload transaction |
288 |
| - * @param {String} name the object name |
289 |
| - * @param {String} uploadId the upload id |
290 |
| - * @param {Array} parts the uploaded parts |
291 |
| - * @param {Object} options |
292 |
| - */ |
293 |
| -proto._completeMultipartUpload = function* _completeMultipartUpload(name, uploadId, parts, options) { |
294 |
| - parts.sort((a, b) => a.number - b.number); |
295 |
| - var xml = '<?xml version="1.0" encoding="UTF-8"?>\n<CompleteMultipartUpload>\n'; |
296 |
| - for (var i = 0; i < parts.length; i++) { |
297 |
| - var p = parts[i]; |
298 |
| - xml += '<Part>\n'; |
299 |
| - xml += '<PartNumber>' + p.number + '</PartNumber>\n'; |
300 |
| - xml += '<ETag>' + p.etag + '</ETag>\n'; |
301 |
| - xml += '</Part>\n'; |
302 |
| - } |
303 |
| - xml += '</CompleteMultipartUpload>'; |
304 |
| - |
305 |
| - options = options || {}; |
306 |
| - options.subres = {uploadId: uploadId}; |
307 |
| - var params = this._objectRequestParams('POST', name, options); |
308 |
| - params.mime = 'xml'; |
309 |
| - params.content = xml; |
310 |
| - if (!(options.headers && options.headers['x-oss-callback'])) { |
311 |
| - params.xmlResponse = true; |
312 |
| - } |
313 |
| - params.successStatuses = [200]; |
314 |
| - var result = yield this.request(params); |
315 |
| - |
316 |
| - var ret = { |
317 |
| - res: result.res, |
318 |
| - bucket: params.bucket, |
319 |
| - name: name, |
320 |
| - etag: result.res.headers['etag'] |
321 |
| - }; |
322 |
| - |
323 |
| - if (options.headers && options.headers['x-oss-callback']) { |
324 |
| - ret.data = JSON.parse(result.data.toString()); |
325 |
| - } |
326 |
| - |
327 |
| - return ret; |
328 |
| -}; |
329 | 167 |
|
330 | 168 | is.file = function (file) {
|
331 | 169 | return typeof(File) !== 'undefined' && file instanceof File;
|
|
0 commit comments