system.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /**
  2. * Created by Administrator on 2015/4/29.
  3. * 系统支持功能
  4. */
  5. var express = require('express');
  6. var router = express.Router();
  7. //文件上传类
  8. var formidable = require('formidable'),
  9. util = require('util'),fs=require('fs');
  10. //时间格式化
  11. var moment = require('moment');
  12. var gm = require('gm');
  13. var url = require('url');
  14. var mime = require('../util/mime').types;
  15. var system = require('../util/system');
  16. //站点配置
  17. var settings = require("../models/db/settings");
  18. /* GET users listing. */
  19. router.post('/upload', function(req, res, next) {
  20. // 获取传入参数
  21. var params = url.parse(req.url,true);
  22. var fileType = params.query.type;
  23. var fileKey = params.query.key;
  24. var form = new formidable.IncomingForm(),files=[],fields=[],docs=[];
  25. console.log('start upload');
  26. //存放目录
  27. var updatePath = "public/upload/images/";
  28. var smallImgPath = "public/upload/smallimgs/";
  29. var newFileName = "";
  30. form.uploadDir = updatePath;
  31. form.on('field', function(field, value) {
  32. fields.push([field, value]);
  33. }).on('file', function(field, file) {
  34. files.push([field, file]);
  35. docs.push(file);
  36. //校验文件的合法性
  37. var realFileType = system.getFileMimeType(file.path);
  38. var contentType = mime[realFileType.fileType] || 'unknown';
  39. if(contentType == 'unknown'){
  40. res.end('typeError');
  41. }
  42. var typeKey = "others";
  43. var thisType = file.name.split('.')[1];
  44. var date = new Date();
  45. var ms = moment(date).format('YYYYMMDDHHmmss').toString();
  46. if(fileType == 'images'){
  47. typeKey = "img"
  48. }
  49. newFileName = typeKey + ms + "."+thisType;
  50. if(fileType == 'images'){
  51. if(realFileType.fileType == 'jpg' || realFileType.fileType == 'jpeg' || realFileType.fileType == 'png' || realFileType.fileType == 'gif'){
  52. if(settings.imgZip){
  53. fs.rename(file.path,updatePath + newFileName,function(err){
  54. if(err){
  55. console.log(err)
  56. }else{
  57. // 图片缩放
  58. var input = updatePath + newFileName;
  59. var out = smallImgPath + newFileName;
  60. if(fileKey == 'ctTopImg'){
  61. gm(input).resize(270,162,'!').autoOrient().write(out, function (err) {
  62. if (err) {
  63. console.log(err);
  64. } else {
  65. console.log('done');
  66. }
  67. });
  68. }else if(fileKey == 'plugTopImg'){ // 插件主题图片
  69. gm(input).resize(270,162,'!').autoOrient().write(out, function (err) {
  70. if (err) {
  71. console.log(err);
  72. } else {
  73. console.log('done');
  74. }
  75. });
  76. }else if(fileKey == 'userlogo'){ // 用户头像
  77. gm(input).resize(100,100,'!').autoOrient().write(out, function (err) {
  78. if (err) {
  79. console.log(err);
  80. } else {
  81. console.log('done');
  82. }
  83. });
  84. }
  85. }
  86. })
  87. }else{
  88. fs.rename(file.path,updatePath + newFileName,function(err){
  89. if(err){
  90. console.log(err)
  91. }
  92. })
  93. }
  94. }else{
  95. res.end('typeError');
  96. }
  97. }
  98. }).on('end', function() {
  99. // 返回文件路径
  100. if(settings.imgZip && (fileKey == 'ctTopImg' || fileKey == 'plugTopImg' || fileKey == 'userlogo')){
  101. res.end('/upload/smallimgs/'+newFileName);
  102. }else{
  103. res.end('/upload/images/'+newFileName);
  104. }
  105. });
  106. form.parse(req, function(err, fields, files) {
  107. err && console.log('formidabel error : ' + err);
  108. console.log('parsing done');
  109. });
  110. });
  111. module.exports = router;