Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions core/constants.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module.exports = {
QUERY_LIMITATION_DEFAULT: 20,
FILEBUCKET_BACKEND: 's3',

// 存储信息
STORAGE_KEY: {
Expand Down
179 changes: 179 additions & 0 deletions core/utils/contentTypeMap.js
Original file line number Diff line number Diff line change
@@ -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'
}
91 changes: 60 additions & 31 deletions sdk-file/src/wechat/uploadFile.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,67 @@ 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 = res.data || {}

if (res.data) {
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 || config.created_at,
'mime_type': data.mimetyp,
'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,
Expand All @@ -15,36 +72,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)
}
Expand Down Expand Up @@ -125,7 +153,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'))
Expand Down