ajax多图片上传+nodejs+express

2 篇文章 0 订阅
1 篇文章 0 订阅

upload
注意事项

  1. 修改post请求路径
  2. laye.alert()修改为alert();因为这里用的插件是自己写的
  3. 安装好相关nodejs npm
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title></title>

<style>

    .add_div {
        width: 400px;
        height: 400px;
    }

    .file-list {
        height: 125px;
        display: none;
        list-style-type: none;
    }

    .file-list img {
        max-width: 70px;
        vertical-align: middle;
    }

    .file-list .file-item {
        margin-bottom: 10px;
        float: left;
        margin-left: 20px;
    }


    .file-list .file-item .file-del {
        display: block;
        margin-left: 20px;
        margin-top: 5px;
        cursor: pointer;
    }
   .re_img_child{
    padding: 10px;
    border-radius: 10px;
    border:3px dashed #ccc;
   }

</style>

</head>
<body>

<div class="add_div">
    <p>
        <span>商品id</span>
        <input type="text" name="" id="gid" value="">
    </p>
    <p>
        <span>选着替换文件图片:</span>
        <input type="file" name="" id="choose-file" multiple="multiple">
        <!--<input type="file" name="" id="choose-file" />-->
    </p>
    <p>
    <ul class="file-list ">

    </ul>
    </p>
    <input style="cursor: pointer;margin-left: 150px;" type="button" value="上传" href="javascript:;" id="upload"/>
    <div class="re_img_child">

    </div>
</div>
<script src="js/jquery.min.js"></script>
<script src="layer/layer.js"></script>
<script type="text/javascript">
    function pushId(self) {
        // body...
        $("#gid").val(self);//商品id赋值
    }
    function initfileList(object,opration) {
            // body...
            // console.log(JSON.stringify(object)[0] )
            if(object!="up"){
                for(let i in object[0]){
                $(".re_img_child").append('<span style="border:solid red px; margin:5px 5px;" class="file-item"><img src="' + object[0][i] + '" alt="" height="70"></span>');
                console.log(object[0][i]);
            } 
               console.log(opration);
            }else{
                $(".re_img_child").children().remove();
            }
            
            $("#upload").val(opration);
        }
</script>
<script>
    $(function () {
        图片上传//
        //声明变量
        var $button = $('#upload'),
            //选择文件按钮
            $file = $("#choose-file"),
            //回显的列表
            $list = $('.file-list'),
            //选择要上传的所有文件
            fileList = [];
        //当前选择上传的文件
        var curFile;
        // 选择按钮change事件,实例化fileReader,调它的readAsDataURL并把原生File对象传给它,
        // 监听它的onload事件,load完读取的结果就在它的result属性里了。它是一个base64格式的,可直接赋值给一个img的src.
        $file.on('change', function (e) {
            //上传过图片后再次上传时限值数量
            var numold = $('li').length;
            if(numold >= 4){
                layer.alert('最多上传4张图片');
                return;
            }
            //限制单次批量上传的数量
            var num = e.target.files.length;
            var numall = numold + num;
            if(num >4 ){
               layer.alert('最多上传4张图片');
               return;
            }else if(numall > 4){
                layer.alert('最多上传4张图片');
                return;
            }
            //原生的文件对象,相当于$file.get(0).files;//files[0]为第一张图片的信息;
            curFile = this.files;
            console.log(this.files);
            //curFile = $file.get(0).files;
            //console.log(curFile);
            //将FileList对象变成数组
            fileList = fileList.concat(Array.from(curFile));
            //console.log(fileList);
            for (var i = 0, len = curFile.length; i < len; i++) {
                reviewFile(curFile[i])
            }
            $('.file-list').fadeIn(2500);
        })


        function reviewFile(file) {
            //实例化fileReader,
            var fd = new FileReader();
            //获取当前选择文件的类型
            var fileType = file.type;
            //调它的readAsDataURL并把原生File对象传给它,
            fd.readAsDataURL(file);//base64
            //监听它的onload事件,load完读取的结果就在它的result属性里了
            fd.onload = function () {
                if (/^image\/[jpeg|png|jpg|gif]/.test(fileType)) {
                    $list.append('<li style="border:solid red px; margin:5px 5px;" class="file-item"><img src="' + this.result + '" alt="" height="70"><span class="file-del">删除</span></li>').children(':last').hide().fadeIn(2500);
                } else {
                    $list.append('<li class="file-item"><span class="file-name">' + file.name + '</span><span class="file-del">删除</span></li>')
                }

            }
        }

        //点击删除按钮事件:
        $(".file-list").on('click', '.file-del', function () {
            let $parent = $(this).parent();
            console.log($parent);
            let index = $parent.index();
            fileList.splice(index, 1);
            $parent.fadeOut(850, function () {
                $parent.remove()
            });
            //$parent.remove()
        });
        //点击上传按钮事件:
        $button.on('click', function () {
            var gid = $('#gid').val();
            if (gid == '') {
                layer.alert('请输入商品id');
                return;
            }
            if(fileList.length!=4){
               layer.alert('请插入4个商品图片');
                return;
            }
             if(fileList.length > 4){
                    layer.alert('最多允许上传4张图片');
                    return;
            }
            else {
                var formData = new FormData();
                for (var i = 0, len = fileList.length; i < len; i++) {
                     // console.log(fileList[i]);
                     // console.log(fileList)
                    formData.append('upfile', fileList[i]);
                    
                }
                let opration = $("#upload").val();
                // console.log(name);
                formData.append('gid',gid);
                formData.append("opration",opration);
                       $.ajax({
                        url: '/img_child_upload',
                        type: 'post',
                        data: formData,
                        dataType: 'json',
                        processData: false,
                        contentType: false,
                        async : true,
                        success: function (data) {
                           $('.file-list').children().remove();
                            // 初始化列表
                            fileList =[];
                            $(".re_img_child").children().remove();
                            console.log(data[0]);
                            for(let i in data[0]){
                                $(".re_img_child").append('<span style="border:solid red px; margin:5px 5px;" class="file-item"><img src="' + data[0][i] + '" alt="" height="70"></span>');
                            }
                            
                            layer.alert("更新成功");
                         },
                         error:function(result){
                             // //console.log(fileList);
                             // console.log(result.)
                             $('.file-list').children().remove();
                                // 初始化列表
                                fileList =[];
                             layer.alert(result.responseText);
                             
                         }
                })
            }
        })
    })
</script>
</body>
</html>

img_child_upload

var express = require('express');                                                                                                                                                                                                                                           
var router = express.Router();
var multiparty = require('multiparty');
var util = require('util');
var fs = require('fs');
var path = require('path');
var Data = require("../../config/db.js");
var C_img = new Data();
router.get('/', function(req, res, next){
    res.send("ok");
});
/* 商品插入 */
router.post('/', function(req, res, next){
  console.log("进入子图操作"+'&&'+'执行时间'+new Date().toLocaleString());
   // 插入图片操作
    //生成multiparty对象,并配置上传目标路径
      var form = new multiparty.Form({uploadDir: './public/goods/'});
      var data = [];
      var updata =[];
      //上传完成后处理
      form.parse(req, function(err, fields, files) {
          // console.log(fields);
          var filesTmp = JSON.stringify(files,null,2);
          if(err){
            console.log('parse error: ' + err);
          }
          else 
          {
             console.log('parse files: ' + filesTmp);
              var inputFile = files.upfile;
              for(let i in inputFile){
                  var uploadedPath = inputFile[i].path;
                  var dstPath = './public/goods/' + inputFile[i].originalFilename;
                  var portpath = '/goods/' + inputFile[i].originalFilename;
                  // console.log(uploadedPath);
                   // console.log(dstPath);
                   data.unshift(portpath);
                   updata.unshift(portpath);
                  //重命名为真实文件名
                  fs.rename(uploadedPath, dstPath, function(err) {
                    if(err){
                      console.log('rename error: ' + err);
                    } else {
                      console.log('rename ok');
                      
                    }
                 });
            }
          }
          // util.inspect({fields: fields, files: filesTmp});
          // console.log(data);
          data.unshift(fields.gid[0]);
          console.log(data);
          console.log(fields.opration[0]);
          C_img.sel_child_img(fields.gid[0],function (err,result) {
            // body...
            if(fields.opration[0]=="上传"){
              if(result.length>0){
              console.log("该商品图片已经插入");
              res.send("该商品图片已经插入");
              return;
            }else{
              C_img.child_img_up(data,function (err,result) {
                // body...
                res.send("上传成功");
              })
             }
            }else{
              console.log("更新子图操作");
              updata.push(fields.gid[0]);
              console.log(updata);
               // 清空资源库图片减少图片冗余        
               C_img.img_update_child(updata,function(err,result){
                  C_img.push_child_img(fields.gid[0],function(err,result){
                      console.log(JSON.stringify(result));
                      res.send(JSON.stringify(result));
                  });
               })
            }
            
          })
          
        // 定义操作数据
      });
});

module.exports = router;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42975115

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值