美文网首页
16 - formidable的上传图片的处理

16 - formidable的上传图片的处理

作者: 小草莓蹦蹦跳 | 来源:发表于2017-10-25 13:10 被阅读0次
  • 处理请求,我们需要对对应的图片的路径进行自定义设置规则

    • 一般设置图片的规则我们采用当前时间的时间戳加对应的一个随机数构成

    • 例如:2017-10-20 15:32:20 时间戳的格式 20171020153220


  • 1.1 设置时间戳

    需要导入第三方包,将任何时间格式,格式成我们需要的格式

var sd = require('silly-datetime');

调用format()方法对现在的时间进行格式化

 var nameTime = sd.format(new Date(),'YYYYMMDD HHmmss');
  • 1.2 设置随机数字
var nameRandom = parseInt(Math.random(0,1)*89999+100000);


  • 导入formidable第三方包,处理文件上传的请求
var formidable = require('formidable');
  • 对请求的路径和请求方法进行判断
if(req.url == '/dopost' && req.method.toLowerCase() == 'post'){
}
  • 0 . 创建表单处理上传
 var form = new formidable.IncomingForm();
    1. 在解析之前,设置原来的上传的路径
  form.uploadDir = './upload';
    1. 解析
    • 我们需要设置两个名称路径。一个新的路径和一个旧的路径, 然后使用新的路径替换旧的路径

    • 2.1 我们需要获取对应的图片的后缀名,需要利用files.tupian.path来获取对应的路径,再通过第三方包path的方法extname()来获取后缀名。

var extName = path.extname(files.tupian.path);
  • 2.2 设置新的路径
    • 当我们使用新的路径替换旧的路径的时候,我们一般使用全路径。所以我们设置路径的时候,最好使用全路径
var newPath = __dirname + '/upload'+ nameTime + nameRandom + extName;
  • 2.3 获取旧的路径
var oldPath = __dirname + '/' + files.tupian.path;
  • 2.4 使用新的路径替换旧的路径
    • 需要导入fs包

    • rename():重命名

    • 第一个参数表示旧的路径,第二个参数表示新的路径,第三个参数表示回调

   fs.rename(oldPath,newPath,function (err) {
                res.end('success');
            })
  • 完整的代码解析
//处理请求,我们需要对对应的图片的路径进行自定义设置规则
/*一般设置图片的规则我们采用当前时间的时间戳加对应的一个随机数据构成
 * 例如:2017-10-20 15:32:20 时间戳的格式 20171020153220
 * */


var http = require('http');

//处理文件上传的请求
var formidable = require('formidable');

//采用第三方包,将任何时间格式,格式成我们需要的格式
var sd = require('silly-datetime');

//导入path包,用于获取图片的后缀名
var path = require('path');

var fs = require('fs');

var server = http.createServer(function (req, res) {

    //对请求的路径和请求方法进行判断
    if(req.url == '/dopost' && req.method.toLowerCase() == 'post'){

        /*0.创建表单处理上传*/
        var form = new formidable.IncomingForm();

        /*0.1在解析之前,设置原来的上传的路径*/
        form.uploadDir = './upload';


        /*1.1设置时间戳*/
        var nameTime = sd.format(new Date(),'YYYYMMDD HHmmss');

        /*1.2设置随机数字*/
        var nameRandom = parseInt(Math.random(0,1)*89999+100000);

        /*1.解析*/
        /*我们需要设置两个名称路径
         * 一个新的路径和一个旧的路径
         * 然后使用新的路径替换旧的路径*/


        form.parse(req,function (err, fields, files) {
            /*我们需要获取对应的图片的后缀名,需要利用files.tupian.path来获取对应的后缀名*/
            console.log(files.tupian.path);
            /*1.3获取后缀名*/
            var extName = path.extname(files.tupian.path);
            console.log(extName);

            /*1.4设置新的路径
             * 当我们使用新的路径替换旧的路径的时候,我们一般使用全路径所以我们设置
             * 如果想要放在upload文件中,则需要拼接两个/upload,因为系统会将最后一个斜杠之前的都解析成目录,后面的都是文件名
             * 路径的时候,最好使用全路径*/
            var newPath = __dirname + '/upload/upload'+ nameTime + nameRandom + 'abs'+ extName;

            /*1.5获取旧的路径*/
            var oldPath = __dirname + '/' + files.tupian.path;

            /*1.6使用新的路径替换旧的路径
             * rename:重命名
             * 第一个参数表示旧的路径
             *第二个参数表示新的路径
             * 第三个参数表示回调*/
            fs.rename(oldPath,newPath,function (err) {
                if (err){
                    console.log('重命名不成功');
                    return;
                }
                res.end('success');
            })
        })
    }

});

server.listen(3000,'127.0.0.1');

相关文章

网友评论

      本文标题:16 - formidable的上传图片的处理

      本文链接:https://www.haomeiwen.com/subject/cvqqpxtx.html