[关闭]
@greenfavo 2015-10-11T12:59:49.000000Z 字数 2142 阅读 646

nodejs文件上传

nodejs


  1. /*
  2. *Date:2015-9-15
  3. *author:石佳楠
  4. *version:1.0
  5. *description:上传文件
  6. *已实现的功能:多文件上传写入数据库
  7. */
  8. var formidable=require("formidable");
  9. var fs=require("fs");
  10. var path=require("path");
  11. var util=require("util");
  12. var models=require("../models/models.js");
  13. //删除上传失败的临时文件
  14. function deleTemp (filePath) {
  15. fs.unlink(filePath, function(err) {
  16. if (err) {
  17. console.info("临时文件删除失败");
  18. console.info(err);
  19. } else {
  20. console.info("删除成功");
  21. }
  22. });
  23. }
  24. //操作数据库,保存文件路径
  25. function saveFilePath(file,fileName){
  26. models.Article.update(
  27. {title:"",author:"nancy"},
  28. {$push:{
  29. files:
  30. {
  31. fileName:file.filepath.name,
  32. filepath:"/uploads/"+fileName
  33. }
  34. }},function(err,data){
  35. if (err) return console.log(err);
  36. console.log(data);
  37. }
  38. )
  39. }
  40. exports.showUpload=function(req,res){
  41. res.render("upload",{
  42. title:"文件上传"
  43. });
  44. }
  45. exports.upload=function(req,res){
  46. var form=new formidable.IncomingForm();
  47. form.maxFieldsSize=10*1024*1024;//文件最大为10M
  48. form.keepExtensions = true;//使用文件的原扩展名
  49. //文件移动的目录文件夹,不存在时创建目标文件夹
  50. var targetDir=path.join('./publics/uploads');
  51. if (!fs.existsSync(targetDir)) fs.mkdir(targetDir);
  52. //临时文件目录,不存在则创建
  53. form.uploadDir=path.join('./publics/uploads/temp');
  54. if (!fs.existsSync(form.uploadDir)) fs.mkdir(form.uploadDir);
  55. form.parse(req, function (err, fields, file) {
  56. if (err) {
  57. console.log("发生错误:"+err);
  58. deleTemp(filePath);//删除临时文件
  59. }
  60. var filePath="";
  61. //从临时文件中遍历第一个上传的文件
  62. if (file.filepath) {
  63. filePath=file.filepath.path;
  64. }else{
  65. for(var key in file){
  66. if (file[key].path&&filePath==='') {
  67. filePath=file[key].path;
  68. break;
  69. };
  70. }
  71. }
  72. //截取文件扩展名,例如.jpg
  73. var fileExt=filePath.substring(filePath.lastIndexOf('.'));
  74. //判断文件类型是否允许上传
  75. if (('.jpg.jpeg.png.gif.psd.docx.doc.xls.xlsx..pptx.ppt.pdf.zip.rar').indexOf(fileExt.toLowerCase())===-1) {
  76. var err = new Error('此文件类型不允许上传');
  77. res.json({code:-1, message:'此文件类型不允许上传'});
  78. deleTemp(filePath);//删除临时文件
  79. }else{
  80. var imgType=('.jpg.jpeg.png.gif').indexOf(fileExt.toLowerCase());
  81. var d=new Date();
  82. var fileName="";
  83. fileName=d.getFullYear()+""+(d.getMonth()+1)+d.getDate()+d.getHours()+d.getMinutes()+d.getSeconds()+fileExt;
  84. var targetFile=path.join(targetDir,fileName);
  85. //移动文件
  86. fs.rename(filePath,targetFile,function(err){
  87. if (err) {
  88. console.log(err);
  89. res.json({code:-1, message:'操作失败'});
  90. deleTemp(filePath);//删除临时文件
  91. }else{
  92. //上传成功,存入数据库
  93. saveFilePath(file,fileName);
  94. res.redirect(303, '/article/new');
  95. }
  96. });
  97. }
  98. })
  99. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注