zoukankan      html  css  js  c++  java
  • node 图片上传功能

    node 代码:

    var http = require("http");
    var express = require('express')
      app = express(),    
      formidable = require('formidable'),
      fs = require('fs');
    app.use(express.static(__dirname + "/public"));
    //创建服务器
    http.createServer(app).listen(8001, function() {
        console.log("当前您设置的端口号为" + 8001);
    });
    app.post('/', function(req, res) {
     var formidable = require('formidable');
        var form = new formidable.IncomingForm();   //创建上传表单
        form.encoding = 'utf-8';        //设置编辑
        form.uploadDir = 'img/';     //设置上传目录/并且保证该目录存在 否则上传不成功
        form.keepExtensions = true;     //保留后缀
        form.maxFieldsSize = 2 * 1024 * 1024;   //文件大小
        form.parse(req, function(err, fields, files) {
            console.log(fields);//前台传的其他参数
            if(err){
             console.log(err);
            }
            var item = null;
            for(var i in files){
               item = files[i];
            }
            var extName = '';  //后缀名
            switch (item.type) {
              case 'image/pjpeg':
                extName = 'jpg';
                break;
              case 'image/jpeg':
                extName = 'jpg';
                break;         
              case 'image/png':
                extName = 'png';
                break;
              case 'image/x-png':
                extName = 'png';
                break;         
            }
            if(extName.length == 0){
                console.log('只支持png和jpg格式图片');
                return;                   
            }
            var avatarName = Date.now() + '.' + extName; //设置图片名字
            var newPath = form.uploadDir + avatarName;  //设置新的图片路径
            fs.renameSync(item.path, newPath);  //重命名
            console.log(newPath);
            res.send(newPath);
        });
    });

    form表单上传:

    <form action="/" method="post" enctype="multipart/form-data">
                <input type="file" name="fulAvatar" id="file1" />
                <input type="text" name="text" id="" value="1111" />
                <input type="submit" value="上传"/>
            </form>

    ajax上传:

    html代码:
    
    
    <input type="file" name="fulAvatar" id="file1" />
            <button id='file'>上传</button>
    
    
    js代码:
    $('#file').click(function(){
            var data = new FormData();
                var files = $("#file1")[0].files;
                if(files){
                    data.append("fulAvatar", files[0]);
                }
                data.append('name','zs');//传其他数据
           if(files[0].size>100000){
                    alert('上传图片大小不得超过100KB');
                    return false;
                }
                $.ajax({
                type: 'post',
                url:'/',
                data:data,
                contentType: false,
                processData: false,
                success : function (msg) {
                        console.log(msg);
                         }
              })      
    });

     原生ajax上传:

    html代码:
    
    
    <input type="file" name="fulAvatar" id="file1" />
            <button id='btn'>上传</button>
    
    
    js代码:
    document.querySelector('#btn').onclick = function() {
                var fileObj = document.getElementById("file1").files[0];
                var form = new FormData();
                form.append("fulAvatar", fileObj);
           form.append("test","zs");//传其他数据
    var XHR=null; if (window.XMLHttpRequest) { // 非IE内核 XHR = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE内核,这里早期IE的版本写法不同,具体可以查询下 XHR = new ActiveXObject("Microsoft.XMLHTTP"); } else { XHR = null; } if(XHR){ XHR.open("POST", "http://www.hxh999.cn/img"); XHR.onreadystatechange = function () { if (XHR.readyState == 4 && XHR.status == 200) { // 这里可以对返回的内容做处理 // 一般会返回JSON或XML数据格式 console.log(XHR.responseText); // 主动释放,JS本身也会回收的 XHR = null; } }; XHR.send(form); } }

     注意:

    form.parse()不会触发的原因是:app.use(express.bodyParser())这一句处理了文件类型的post,所以导致那些第三方包对文件的处理都不起作用了。

    express.bodyParser实际上包括了三部分:express.json, express.urlencoded, 和 express.multipart(就是处理了文件的部分),所以我们实际上只需要它的前两部分就够了。

    // 将:
    app.use(express.bodyParser());
    
    // 改为:
    app.use(express.json());
    app.use(express.urlencoded());
  • 相关阅读:
    [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串
    [LeetCode] 76. Minimum Window Substring 最小窗口子串
    window.scrollTo和window.scrollBy
    background-clip与background-origin
    page-break-before和page-break-after
    CSS counter计数器(content目录序号自动递增)详解
    移动端网页巧用 margin和padding 的百分比实现自适应
    监听屏幕旋转事件window. onorientationchange
    apple-touch-startup-image 制作iphone web应用程序的启动画面
    当把链接保存到手机桌面。设置图标 只在safari浏览器中有用
  • 原文地址:https://www.cnblogs.com/bruce-gou/p/5708439.html
Copyright © 2011-2022 走看看