From c125890aa170b22c4ce42dd6826e982f10ead17e Mon Sep 17 00:00:00 2001 From: xiejiayun Date: Mon, 7 Sep 2020 11:52:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E5=88=B0=20s3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/constants.js | 1 + core/utils/contentTypeMap.js | 179 ++++++++++++++++++++++++++++++ sdk-file/src/wechat/uploadFile.js | 87 +++++++++------ 3 files changed, 236 insertions(+), 31 deletions(-) create mode 100644 core/utils/contentTypeMap.js diff --git a/core/constants.js b/core/constants.js index bad64b9a..8385f912 100644 --- a/core/constants.js +++ b/core/constants.js @@ -1,5 +1,6 @@ module.exports = { QUERY_LIMITATION_DEFAULT: 20, + FILEBUCKET_BACKEND: 's3', // 存储信息 STORAGE_KEY: { diff --git a/core/utils/contentTypeMap.js b/core/utils/contentTypeMap.js new file mode 100644 index 00000000..6dab733b --- /dev/null +++ b/core/utils/contentTypeMap.js @@ -0,0 +1,179 @@ +module.exports = { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'jpe': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'apk': 'application/vnd.android.package-archive', + '3gp': 'video/3gpp', + 'ai': 'application/postscript', + 'aif': 'audio/x-aiff', + 'aifc': 'audio/x-aiff', + 'aiff': 'audio/x-aiff', + 'asc': 'text/plain', + 'atom': 'application/atom+xml', + 'au': 'audio/basic', + 'avi': 'video/x-msvideo', + 'bcpio': 'application/x-bcpio', + 'bin': 'application/octet-stream', + 'bmp': 'image/bmp', + 'cdf': 'application/x-netcdf', + 'cgm': 'image/cgm', + 'class': 'application/octet-stream', + 'cpio': 'application/x-cpio', + 'cpt': 'application/mac-compactpro', + 'csh': 'application/x-csh', + 'css': 'text/css', + 'dcr': 'application/x-director', + 'dif': 'video/x-dv', + 'dir': 'application/x-director', + 'djv': 'image/vnd.djvu', + 'djvu': 'image/vnd.djvu', + 'dll': 'application/octet-stream', + 'dmg': 'application/octet-stream', + 'dms': 'application/octet-stream', + 'doc': 'application/msword', + 'dtd': 'application/xml-dtd', + 'dv': 'video/x-dv', + 'dvi': 'application/x-dvi', + 'dxr': 'application/x-director', + 'eps': 'application/postscript', + 'etx': 'text/x-setext', + 'exe': 'application/octet-stream', + 'ez': 'application/andrew-inset', + 'flv': 'video/x-flv', + 'gram': 'application/srgs', + 'grxml': 'application/srgs+xml', + 'gtar': 'application/x-gtar', + 'gz': 'application/x-gzip', + 'hdf': 'application/x-hdf', + 'hqx': 'application/mac-binhex40', + 'htm': 'text/html', + 'html': 'text/html', + 'ice': 'x-conference/x-cooltalk', + 'ico': 'image/x-icon', + 'ics': 'text/calendar', + 'ief': 'image/ief', + 'ifb': 'text/calendar', + 'iges': 'model/iges', + 'igs': 'model/iges', + 'jnlp': 'application/x-java-jnlp-file', + 'jp2': 'image/jp2', + 'js': 'application/x-javascript', + 'kar': 'audio/midi', + 'latex': 'application/x-latex', + 'lha': 'application/octet-stream', + 'lzh': 'application/octet-stream', + 'm3u': 'audio/x-mpegurl', + 'm4a': 'audio/mp4a-latm', + 'm4p': 'audio/mp4a-latm', + 'm4u': 'video/vnd.mpegurl', + 'm4v': 'video/x-m4v', + 'mac': 'image/x-macpaint', + 'man': 'application/x-troff-man', + 'mathml': 'application/mathml+xml', + 'me': 'application/x-troff-me', + 'mesh': 'model/mesh', + 'mid': 'audio/midi', + 'midi': 'audio/midi', + 'mif': 'application/vnd.mif', + 'mov': 'video/quicktime', + 'movie': 'video/x-sgi-movie', + 'mp2': 'audio/mpeg', + 'mp3': 'audio/mpeg', + 'mp4': 'video/mp4', + 'mpe': 'video/mpeg', + 'mpeg': 'video/mpeg', + 'mpg': 'video/mpeg', + 'mpga': 'audio/mpeg', + 'ms': 'application/x-troff-ms', + 'msh': 'model/mesh', + 'mxu': 'video/vnd.mpegurl', + 'nc': 'application/x-netcdf', + 'oda': 'application/oda', + 'ogg': 'application/ogg', + 'ogv': 'video/ogv', + 'pbm': 'image/x-portable-bitmap', + 'pct': 'image/pict', + 'pdb': 'chemical/x-pdb', + 'pdf': 'application/pdf', + 'pgm': 'image/x-portable-graymap', + 'pgn': 'application/x-chess-pgn', + 'pic': 'image/pict', + 'pict': 'image/pict', + 'pnm': 'image/x-portable-anymap', + 'pnt': 'image/x-macpaint', + 'pntg': 'image/x-macpaint', + 'ppm': 'image/x-portable-pixmap', + 'ppt': 'application/vnd.ms-powerpoint', + 'ps': 'application/postscript', + 'qt': 'video/quicktime', + 'qti': 'image/x-quicktime', + 'qtif': 'image/x-quicktime', + 'ra': 'audio/x-pn-realaudio', + 'ram': 'audio/x-pn-realaudio', + 'ras': 'image/x-cmu-raster', + 'rdf': 'application/rdf+xml', + 'rgb': 'image/x-rgb', + 'rm': 'application/vnd.rn-realmedia', + 'roff': 'application/x-troff', + 'rtf': 'text/rtf', + 'rtx': 'text/richtext', + 'sgm': 'text/sgml', + 'sgml': 'text/sgml', + 'sh': 'application/x-sh', + 'shar': 'application/x-shar', + 'silo': 'model/mesh', + 'sit': 'application/x-stuffit', + 'skd': 'application/x-koan', + 'skm': 'application/x-koan', + 'skp': 'application/x-koan', + 'skt': 'application/x-koan', + 'smi': 'application/smil', + 'smil': 'application/smil', + 'snd': 'audio/basic', + 'so': 'application/octet-stream', + 'spl': 'application/x-futuresplash', + 'src': 'application/x-wais-source', + 'sv4cpio': 'application/x-sv4cpio', + 'sv4crc': 'application/x-sv4crc', + 'svg': 'image/svg+xml', + 'swf': 'application/x-shockwave-flash', + 't': 'application/x-troff', + 'tar': 'application/x-tar', + 'tcl': 'application/x-tcl', + 'tex': 'application/x-tex', + 'texi': 'application/x-texinfo', + 'texinfo': 'application/x-texinfo', + 'tif': 'image/tiff', + 'tiff': 'image/tiff', + 'tr': 'application/x-troff', + 'tsv': 'text/tab-separated-values', + 'txt': 'text/plain', + 'ustar': 'application/x-ustar', + 'vcd': 'application/x-cdlink', + 'vrml': 'model/vrml', + 'vxml': 'application/voicexml+xml', + 'wav': 'audio/x-wav', + 'wbmp': 'image/vnd.wap.wbmp', + 'wbxml': 'application/vnd.wap.wbxml', + 'webm': 'video/webm', + 'wml': 'text/vnd.wap.wml', + 'wmlc': 'application/vnd.wap.wmlc', + 'wmls': 'text/vnd.wap.wmlscript', + 'wmlsc': 'application/vnd.wap.wmlscriptc', + 'wmv': 'video/x-ms-wmv', + 'wrl': 'model/vrml', + 'xbm': 'image/x-xbitmap', + 'xht': 'application/xhtml+xml', + 'xhtml': 'application/xhtml+xml', + 'xls': 'application/vnd.ms-excel', + 'xml': 'application/xml', + 'xpm': 'image/x-xpixmap', + 'xsl': 'application/xml', + 'xslt': 'application/xslt+xml', + 'xul': 'application/vnd.mozilla.xul+xml', + 'xwd': 'image/x-xwindowdump', + 'xyz': 'chemical/x-xyz', + 'zip': 'application/zip' +} \ No newline at end of file diff --git a/sdk-file/src/wechat/uploadFile.js b/sdk-file/src/wechat/uploadFile.js index 9b9e8267..638cd386 100644 --- a/sdk-file/src/wechat/uploadFile.js +++ b/sdk-file/src/wechat/uploadFile.js @@ -2,10 +2,63 @@ const BaaS = require('core-module/baas') const constants = require('core-module/constants') const HError = require('core-module/HError') const utils = require('core-module/utils') +const contentType = require('core-module/utils/contentTypeMap') const {getUploadFileConfig, getUploadHeaders} = require('core-module/upload') const wxUpload = (config, resolve, reject, type) => { + + let uploadSuccess = (res) => { + let result = {} + let data = JSON.parse(res.data) + + result.status = 'ok' + result.path = config.destLink + result.file = { + 'id': config.id, + 'path': config.destLink, + 'name': config.fileName, + 'created_at': data.time, + 'mime_type': data.mimetype, + 'cdn_path': data.url, + 'size': data.file_size, + } + + delete res.data + + if (type && type === 'json') { + res.data = result + } else { + res.data = JSON.stringify(result) + } + + try { + resolve(utils.validateStatusCode(res)) + } catch (err) { + reject(err) + } + } + return getUploadHeaders().then(header => { + let extension = config.filePath.substring(config.filePath.lastIndexOf('.') + 1) + if (config.filebucketBackend === constants.FILEBUCKET_BACKEND) { + return wx.getFileSystemManager().readFile({ + filePath: config.filePath, + success: (data) => { + wx.request({ + url: config.uploadUrl, + method: 'PUT', + header: { + 'content-type': contentType[extension], + }, + data: data.data, + success: uploadSuccess, + fail: () => { + BaaS.request.wxRequestFail(reject) + } + }) + } + }) + } return wx.uploadFile({ url: config.uploadUrl, filePath: config.filePath, @@ -15,36 +68,7 @@ const wxUpload = (config, resolve, reject, type) => { policy: config.policy }, header, - success: (res) => { - let result = {} - let data = JSON.parse(res.data) - - result.status = 'ok' - result.path = config.destLink - result.file = { - 'id': config.id, - 'path': config.destLink, - 'name': config.fileName, - 'created_at': data.time, - 'mime_type': data.mimetype, - 'cdn_path': data.url, - 'size': data.file_size, - } - - delete res.data - - if (type && type === 'json') { - res.data = result - } else { - res.data = JSON.stringify(result) - } - - try { - resolve(utils.validateStatusCode(res)) - } catch (err) { - reject(err) - } - }, + success: uploadSuccess, fail: () => { BaaS.request.wxRequestFail(reject) } @@ -125,7 +149,8 @@ const uploadFile = (fileParams, metaData, type) => { authorization: res.data.authorization, uploadUrl: res.data.upload_url, filePath: fileParams.filePath, - destLink: res.data.path + destLink: res.data.path, + filebucketBackend: res.data.filebucket_backend, } uploadTask = wxUpload(config, e => { if (isAborted) return rj(new Error('aborted')) From 409c46c051d80c3bebc12d44cae3bab010ba7bf5 Mon Sep 17 00:00:00 2001 From: xiejiayun Date: Tue, 8 Sep 2020 10:33:46 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=88=B0=20s3=20=E7=9A=84=E6=97=B6=E5=80=99=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=97=A0=E6=95=B0=E6=8D=AE=E8=BF=94=E5=9B=9E=EF=BC=8C?= =?UTF-8?q?sdk=20=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk-file/src/wechat/uploadFile.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sdk-file/src/wechat/uploadFile.js b/sdk-file/src/wechat/uploadFile.js index 638cd386..02536b3d 100644 --- a/sdk-file/src/wechat/uploadFile.js +++ b/sdk-file/src/wechat/uploadFile.js @@ -9,7 +9,11 @@ const wxUpload = (config, resolve, reject, type) => { let uploadSuccess = (res) => { let result = {} - let data = JSON.parse(res.data) + let data = res.data || {} + + if (res.data) { + data = JSON.parse(res.data) + } result.status = 'ok' result.path = config.destLink @@ -17,8 +21,8 @@ const wxUpload = (config, resolve, reject, type) => { 'id': config.id, 'path': config.destLink, 'name': config.fileName, - 'created_at': data.time, - 'mime_type': data.mimetype, + 'created_at': data.time || config.created_at, + 'mime_type': data.mimetyp, 'cdn_path': data.url, 'size': data.file_size, } From 9d5b6aa0ff1935f57331e33a5b4c15189f1a482f Mon Sep 17 00:00:00 2001 From: xiejiayun Date: Mon, 28 Sep 2020 15:27:08 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fixed=20typo=20=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E5=90=8E=E5=86=99=E5=85=A5?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E4=B8=8D=E6=88=90=E5=8A=9F=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk-file/src/wechat/uploadFile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk-file/src/wechat/uploadFile.js b/sdk-file/src/wechat/uploadFile.js index 02536b3d..3ba0d0b9 100644 --- a/sdk-file/src/wechat/uploadFile.js +++ b/sdk-file/src/wechat/uploadFile.js @@ -22,7 +22,7 @@ const wxUpload = (config, resolve, reject, type) => { 'path': config.destLink, 'name': config.fileName, 'created_at': data.time || config.created_at, - 'mime_type': data.mimetyp, + 'mime_type': data.mimetype, 'cdn_path': data.url, 'size': data.file_size, }