Created
February 16, 2016 09:29
-
-
Save Kenshinhu/d79eff195beb9d30d64a to your computer and use it in GitHub Desktop.
leancloud node service formhelper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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