(file, filename, toUserName)
| 496 | |
| 497 | // file: Stream, Buffer, File, Blob |
| 498 | uploadMedia (file, filename, toUserName) { |
| 499 | return Promise.resolve().then(() => { |
| 500 | let name, type, size, ext, mediatype, data |
| 501 | return new Promise((resolve, reject) => { |
| 502 | if ((typeof (File) !== 'undefined' && file.constructor == File) || |
| 503 | (typeof (Blob) !== 'undefined' && file.constructor == Blob)) { |
| 504 | name = file.name || 'file' |
| 505 | type = file.type |
| 506 | size = file.size |
| 507 | data = file |
| 508 | return resolve() |
| 509 | } else if (Buffer.isBuffer(file)) { |
| 510 | if (!filename) { |
| 511 | return reject(new Error('文件名未知')) |
| 512 | } |
| 513 | name = filename |
| 514 | type = mime.lookup(name) |
| 515 | size = file.length |
| 516 | data = file |
| 517 | return resolve() |
| 518 | } else if (file.readable) { |
| 519 | if (!file.path && !filename) { |
| 520 | return reject(new Error('文件名未知')) |
| 521 | } |
| 522 | name = path.basename(file.path || filename) |
| 523 | type = mime.lookup(name) |
| 524 | file.pipe(bl((err, buffer) => { |
| 525 | if (err) { |
| 526 | return reject(err) |
| 527 | } |
| 528 | size = buffer.length |
| 529 | data = buffer |
| 530 | return resolve() |
| 531 | })) |
| 532 | } |
| 533 | }).then(() => { |
| 534 | ext = name.match(/.*\.(.*)/) |
| 535 | if (ext) { |
| 536 | ext = ext[1].toLowerCase() |
| 537 | } else { |
| 538 | ext = '' |
| 539 | } |
| 540 | |
| 541 | switch (ext) { |
| 542 | case 'bmp': |
| 543 | case 'jpeg': |
| 544 | case 'jpg': |
| 545 | case 'png': |
| 546 | mediatype = 'pic' |
| 547 | break |
| 548 | case 'mp4': |
| 549 | mediatype = 'video' |
| 550 | break |
| 551 | default: |
| 552 | mediatype = 'doc' |
| 553 | } |
| 554 | |
| 555 | let clientMsgId = getClientMsgId() |
no test coverage detected