我们的云代码提供了Web Hosting的功能,您可以在我们的云代码上完整托管一个网站。对于一个网站应用来说,处理上传文件是很常见的需求。比如用户上传头像,上传附件等等。
同样,我们使用express.js框架也是支持上传文件的。现在让我们看下怎么上传一张图标,比如应用的icon图片。
首先,您需要对云代码有基本的了解,推荐阅读下我们的《云代码开发指南》中的初始配置和web hosting章节。
其次,您需要配置express框架使用bodyParser这个中间件,它会解析表单里的文件,并将上传文件都放到请求对象的files对象里:
app.use(express.bodyParser());
接下来,编写一个html表单放到 public 目录:
这个表单很简单,只有一个字段iconImage,用来上传一个文件到 `/upload` 路径下,使用multipart表单POST提交。
接下来,我们要编写下 `/upload` 的处理函数,require受限制的 `fs` 模块读取上传文件:
var fs = require('fs'); app.post('/upload', function(req, res){ var iconFile = req.files.iconImage; if(iconFile){ fs.readFile(iconFile.path, function(err, data){ if(err) return res.send("读取文件失败"); var base64Data = data.toString('base64'); var theFile = new AV.File(iconFile.name, {base64: base64Data}); theFile.save().then(function(theFile){ res.send("上传成功!"); }); }); } else { res.send("请选择一个文件。"); } });
代码非常简单,从req.files中得到iconImage文件,使用 `fs.readFile` 来读取这个文件的内容,并创建一个AV.File对象存储到AVOS Cloud平台,告诉客户端保存成功。
请注意,这里的 `fs` 模块跟Node.js标准库的文件模块不同,它只能用于读取上传文件,除了readFile方法之外都不可用。