bob体育官方平台
Nginx+Node.js搭建图片服务器

kindEditor官英特网中提供了ASP,ASP.NET,JSP相关的组合应用,

node自带querystring不可能获取

Nginx+Node.js搭建图片服务器

图表上传央浼由Node管理,图片访问伏乞由Nginx处理。

1、Nginx配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush    on;
    sendfile_max_chunk 256K;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
   
    upstream localhost {
        server localhost:3000;#node服务器
    }

    server {
        listen      80;
        server_name  localhost;
       
       
        #开启索引作用
        autoindex    on;
       
        #关门总计文件确切大小
        autoindex_exact_size off;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #上传操作由node服务器管理
        location / {
            proxy_pass    ;
            index    index.html;
        }
       
        #照耀图片访谈url
        location /image/ {
            expires 30d;#缓存时间
            root    E:/Study/nginx/nginx-1.7.6/files;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass  ;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ .php$ {
        #    root          html;
        #    fastcgi_pass  127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen      8000;
    #    listen      somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root  html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen      443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root  html;
    #        index  index.html index.htm;
    #    }
    #}

}

2、nodejs项目构造

  1)项目布局图

图片 1

  2)bin/www 是开发银行脚本

#!/usr/bin/env node
var debug = require('debug')('file-server');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + server.address().port);
  debug('Express server listening on port ' + server.address().port);
});

  3)config/setting.json 是前后相继中用的片段常量以json格式配置

{
    "image_url":"",
    "image_dir":"E:/Study/nginx/nginx-1.7.6/files/image",
    "tmp_dir":"E:/Study/nginx/nginx-1.7.6/tmp"
}

  4)controller/file-ctrl.js 是文本上传的管理代码

var fs = require('fs');
var path = require('path');
var    formidable = require('formidable');
var util = require('util');
var fs = require('fs');
var path = require('path');

var setting = require('../config/setting.json');

/**
 * 上传
 */
exports.upload = function(req,res){

    var form = new formidable.IncomingForm();
    form.encoding = 'utf-8';

    //借使须要一时文件保持原本文件扩充名,设置为true
    form.keepExtensions = false;

    //文件大小限定,私下认可2MB
    form.maxFieldsSize = 2 * 1024 * 1024;

    //图片寄存目录
    var imageDir = setting.image_dir;

    //上传一时目录
    var tmpDir = setting.tmp_dir;

    form.uploadDir = tmpDir;//目录必要已存在
    /**
    * 田野先生s 表单中的别的属性
    * files  文件集合
    */
    form.parse(req, function(err, fields, files) {

        //图片完整路线
        var imagePath = path.resolve(imageDir, files.file.name);

        //将权且目录中的图片移动到图片贮存目录下
        fs.rename(files.file.path,imagePath,function(err){
            if(err) {
                res.json({'success':false,'msg':err});
            }else{
                var image_url = setting.image_url+'/'+files.file.name;
                res.json({'success':true,'msg':'上传成功!','image_url':image_url});
                //res.json({'success':true,'msg':'上传成功!','image_url':image_url,'fields':util.inspect({fields: fields, files: files})});
            }
        });
    });
}

/**
 * 下载
 */
exports.download = function(req,res){
    var filename = req.params.filename;
    var dir = setting.file_dir;
    var file_path = path.resolve(dir,filename);
    fs.exists(file_path,function(exists) {
        if(!exists) {
            res.json({'success':false,'msg':'文件海市蜃楼!'}卡塔尔;
        }else{
            res.download(file_path,function(err){
                if(err) {
                    res.json({'success':false,'msg':err});
                }
            });
           
        }
    });   
}

  5)routes/route.js 是漫天项指标路由调整

var express = require('express');
var router = express.Router();

var file_ctrl = require('../controller/file-ctrl')

/**上传文件*/
router.post('/upload',file_ctrl.upload);

module.exports = router;

  6)app.js 是项指标大局配置

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/route');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

/// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

/// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

module.exports = app;

  6)package.json  是依赖包管理

{
  "name": "file-server",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "express": "~4.2.0",
    "static-favicon": "~1.0.0",
    "morgan": "~1.0.0",
    "cookie-parser": "~1.0.1",
    "body-parser": "~1.0.0",
    "debug": "~0.7.4",
    "jade": "~1.3.0",
    "formidable":"*"
  }
}

  项目用到了expressjs框架。

3、轻便写一个html上传页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>upload</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
 
  <body>
        <form action="" method="post" enctype="multipart/form-data">
            <input type="file" name="file">
            <p>
            <input type="submit" value="上传">
        </form>
  </body>
</html>

4、运行node服务器和Nginx服务器

  步向项目根目录,实施 node binwww  或 npm start (那一个是在package.json中配备的台本命令"scripts"卡塔尔(قطر‎

5、测试

  1)上传图片

图片 2

  2)上传成功

图片 3

  3)直接访问image_url就能够观察图片了

越来越多Nginx相关课程见以下内容:

CentOS 6.2实战计划Nginx+MySQL+PHP

使用Nginx搭建WEB服务器

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全经过

CentOS 6.3下Nginx品质调优

CentOS 6.3下配置Nginx加载ngx_pagespeed模块

CentOS 6.4安装配置Nginx+Pcre+php-fpm

Nginx安装配备利用详细笔记

Nginx日志过滤 使用ngx_log_if不记录特定日志

Nginx 的亲力亲为介绍:请点这里
Nginx 的下载地址:请点这里

本文恒久更新链接地址:

图片上传央求由Node管理,图片访谈央求由Nginx管理。 1、Nginx配置 #user nobody; worker_processes 1; #error_log logs/error.log...

环境:unbuntu 14.10nodejs 0.10.35express 4.11.2formidable 1.0.16kindEditor 4.1.10webStorm 8

formidable除了文件无法得到

1.透过IDE或极端创立叁个称呼为test的工程

multer能够获得

2.编写制定package.json增添formidable注重,这里运用的是1.0.16版本,之后经过终点实施npm install实现重视的装置

前几天在求学node踩到二个坑:form设置enctype="multipart/form-data"上传文件时,不大概取获得表单别的input的值。

3.将kindEditor整个目录放到test/public/lib下

因为事情发生前上传文件用的是formidable

4.修正index.ejs和index.js文件index.ejs中整合kindEditor: 设置kindEditor的uploadJson为nodejs所提供的拍卖图片上传的路由url这里用的是/uploadImgindex.js中加多管理图片上传的路由url: 加多/uploadImg对应的post管理格局,代码如下:

方法1:formidable(无法得到其余input的值)

复制代码 代码如下:

引包 app.js

HTML内容

varapp =express();varexpress = require("express");

复制代码 代码如下:var express = require;var router = express.Router(卡塔尔;var formidable = require;/* GET home page. */router.get('/', function { res.render('index', { title: '图片上传' }卡塔尔;}卡塔尔(قطر‎;router.post('/uploadImg', function { var form = new formidable.IncomingForm(卡塔尔(英语:State of Qatar); form.keepExtensions = true; form.uploadDir = __dirname + '/../public/upload'; form.parse(req, function { if { throw err; } var image = files.imgFile; var path = image.path; path = path.replace; var url = '/upload' + path.substr, path.length); var info = { "error": 0, "url": url }; res.send;module.exports = router;

var router = require("./controller"卡塔尔国; //前端MVC的C 二个顶层变量

今后经过IDE或极端运行test工程,通过

图片 4

controller/package.json

{"main" :"router.js"}

POST请求 app.js:

app.post("/file_upload",router.uploadfile);

controller/router:

;)

图片 5

exports.uploadfile=function(req,res){//console.log(req.route);var form =newformidable.IncomingForm();

form.encoding= 'utf-8';

form.uploadDir= "./uploads";//上传路线form.parse(req, function(err, 田野s, files卡塔尔(قطر‎ {//表单上盛传东西在田野s 文件在files里面//改革文件名var timeStr = (Math.floor(Math.random(卡塔尔(قطر‎*9000+1000)).toString();

返回顶部