Skip to content

Instantly share code, notes, and snippets.

@Kenshinhu
Created February 16, 2016 09:29
Show Gist options
  • Save Kenshinhu/d79eff195beb9d30d64a to your computer and use it in GitHub Desktop.
Save Kenshinhu/d79eff195beb9d30d64a to your computer and use it in GitHub Desktop.
leancloud node service formhelper
require! \debug
require! \fs
require! \multiparty
_ = require \lodash
{isArray} = require \util
AV = require \leanengine
log = debug "carlive:formHelper"
#上传文件
saveFile = (file)->
_p = new AV.Promise!
log "file : #{JSON.stringify file}"
fs.readFile file.path,(err,data)->
if err
error "saveFile : #{JSON.stringify err}"
_p.reject err
else
base64Data = data.toString 'base64'
theFile = new AV.File file.originalFilename,{base64:base64Data}
# log "savetoFile : #{base64Data}"
theFile.save!.then ->
log "savetoFile : #{JSON.stringify &}"
data = {}
key = file.fieldName
data[key] = {"__type":"Pointer","className":"_File","objectId":&0.id}
_p.resolve data
# promise.resolve.apply promise,&
,->
error "savetoFile : #{JSON.stringify &}"
_p.reject &
# promise.reject.apply promise,&
_p
#表单处理
exports.FormParse = (req)->
form = new multiparty.Form!
# form.on 'part', (part) ->
# log "multipart On part : #{part.filename}"
getFileName = (headerString)->
_str = headerString.split ';'
for str in _str
log "getfileName #{str}"
_p = new AV.Promise!
body = req.body
form.parse req, (err, fields, files)->
_fields = {}
for k,v of body
_fields[k] = v
for key,value of fields
_fields[key] = if value.length===1
then value[0]
else value
promises = []
for k,v of files
if isArray v
for _file in v
disposition = _file.headers["content-disposition"]
getFileName disposition
log "content-disposition : #{disposition}"
# log "Ready for Upload! file : #{JSON.stringify _file}"
if _file.size
promises.push saveFile _file
else
if v.size
disposition = _file.headers["content-disposition"]
getFileName disposition
log "content-disposition : #{disposition}"
# log "Ready for Upload! file : #{JSON.stringify v}"
# p = new AV.Promise!
# saveFile p,_file
promises.push saveFile v
log "promises : #{promises.length}"
AV.Promise.when promises
.then ->
flatten =[]
for k,v of &
console.log "#k"
flatten.push v
log "FormParse : #{JSON.stringify flatten}"
_merge = {}
if flatten.length === 1
_merge = flatten[0]
else
for item in flatten
for k,v of item
console.log "item : #{k}"
_merge[k] = [] if !_merge[k]
_merge[k].push v
formData = _.merge _fields,_merge
log "FormData : #{JSON.stringify formData,'','\t'}"
_p.resolve formData,fields
,->
_p.reject &
_p
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment