function* getContent(file) { if (is.buffer(file)) { return file; } var created = false; if (is.string(file)) { file = fs.createReadStream(file); created = true; } if (!is.readableStream(file)) { throw new TypeError('upload file type error'); } var bufs = []; var buf; while (buf = yield read(file)) { bufs.push(buf); } if (created) { file.destroy(); } return Buffer.concat(bufs); }
proto.put = function* (name, file, options) { var content; options = options || {}; if (is.buffer(file)) { content = file; } else if (is.string(file)) { options.mime = options.mime || mime.lookup(path.extname(file)); var stream = fs.createReadStream(file); options.contentLength = yield this._getFileSize(file); return yield this.putStream(name, stream, options); } else if (is.readableStream(file)) { return yield this.putStream(name, file, options); } else { throw new TypeError('Must provide String/Buffer/ReadableStream for put.'); } options.headers = options.headers || {}; this._convertMetaToHeaders(options.meta, options.headers); var params = this._objectRequestParams('PUT', name, options); params.mime = options.mime; params.content = content; params.successStatuses = [200]; var result = yield this.request(params); return { name: name, url: this._objectUrl(name), res: result.res, }; };
proto.put = async function put(name, file, options) { let content; options = options || {}; if (is.buffer(file)) { content = file; } else if (is.string(file)) { options.mime = options.mime || mime.lookup(path.extname(file)); const stream = fs.createReadStream(file); options.contentLength = await this._getFileSize(file); return await this.putStream(name, stream, options); } else if (is.readableStream(file)) { return await this.putStream(name, file, options); } else { throw new TypeError('Must provide String/Buffer/ReadableStream for put.'); } options.headers = options.headers || {}; this._convertMetaToHeaders(options.meta, options.headers); const method = options.method || 'PUT'; const params = this._objectRequestParams(method, name, options); callback.encodeCallback(params, options); params.mime = options.mime; params.content = content; params.successStatuses = [200]; const result = await this.request(params); const ret = { name, url: this._objectUrl(name), res: result.res }; if (params.headers && params.headers['x-oss-callback']) { ret.data = JSON.parse(result.data.toString()); } return ret; };