多文件上传前端


 <!--系统主页-->
<!DOCTYPE html>
<!--HTML标签的lang属性:用于指定网页的自然语言-->
<html lang="zh-cn" ng-app="papp" ng-controller="pCtrl">

    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title></title>
        
        <!--css文件引入--start-->
        <link href="css/bootstrap.css" rel="stylesheet" />                
        <link href="css/simple-line-icons.css" rel="stylesheet" />
        <link href="css/font-awesome.min.css" rel="stylesheet" />
        <!--css文件引入--end-->
        
        <!--自定义css文件引入--start-->
        <link href="css/custom/synwork.css" rel="stylesheet" />
        <link href="css/custom/app.css" rel="stylesheet" />
        <!--自定义css文件引入--end-->
            
        <!--js文件引入--start-->
        <script src="js/default/angular1.5.min.js" type="text/javascript"></script>
        <script src="js/default/jquery.min.js" type="text/javascript"></script>
        <script src="js/default/jquery.autocompleter.js" type="text/javascript"></script>    
        
        <script src="js/default/bootstrap.js" type="text/javascript"></script>
        <script src="js/layer/layer.js"></script>
        <!--js文件引入--end-->
        
       

    <body>        
            
        <div>
            <!--文件上传--start-->
            <div class="form-group row">
                <label class="col-lg-1 control-label">照&nbsp; &nbsp;片:</label>
                <div class="col-lg-1">
                    <a href='javascript:void(0);' class="file">添加附件
                        <input type="file" class="file" multiple="multiple" name="files" id="fileInput" οnchange='angular.element(this).scope().fileChanged(this)'>
                    </a>                    
                </div>
                
                <div class="col-lg-1">
                    <a href="javascript:;" class="file" ng-click="qinkong()">取消附件</a>
                </div>
                
            </div>
            <!--文件上传--end-->
            
            
            <br>
            <!--显示文件名--start-->
            <div class="form-group row">
                <label class="col-lg-1 control-label">文件名:</label>
                <div class="col-lg-4">
                    <table>
                        <tr ng-repeat="it in names" style="height: 10px;">
                            <td>{{it.name}}</td>            
                              <td>&nbsp;&nbsp;<a ng-click="delFile(it,$index)"><i class="fa fa-window-close"></i></a></td>
                        </tr>
                    </table>
                </div>
            </div>    
            <!--显示文件名--end-->
            
            <div class="form-group row">
                <label class="col-lg-1 control-label">视&nbsp; &nbsp;频:</label>
                <div class="col-lg-1">
                    <a href='javascript:void(0);' class="file">添加附件
                        <input type="file" class="file" multiple="multiple" name="files2" id="fileInput" οnchange='angular.element(this).scope().fileChanged2(this)'>
                    </a>                    
                </div>
                <div class="col-lg-1">
                    <a href="javascript:;" class="file" ng-click="qinkong2()">取消附件</a>
                </div>
                
            </div>
            
            <div class="form-group row">
                <label class="col-lg-1 control-label">文件名:</label>
                <div class="col-lg-4">
                    <table>
                        <tr ng-repeat="it in names2" style="height: 10px;">
                            <td>{{it.name}}</td>            
                              <td>&nbsp;&nbsp;<a ng-click="delFile2(it,$index)"><i class="fa fa-window-close"></i></a></td>
                        </tr>
                    </table>
                </div>
            </div>    
            
        </div>
        
        <a class="btn btn-success" ng-click="add()">上传</a>
        
        
    </body>
    <script>
        var app = angular.module('papp', []);
        app.controller('pCtrl',function($scope, $http, $rootScope, $window) {
            
            //定义空数组,存放要上传的文件名
            $scope.names = new Array();
            $scope.names2 = new Array();
            
            //定义空数组,存放要上传的文件
            var fd = new FormData();
            
            //定义空数组,存放要上传的文件,作为间接变量
            var fd1=new FormData();            
            var fd2=new FormData();
            
            //文件数量
            $scope.amount=0;
            $scope.amount2=0;
            
            //文件key值,文件名id
            $scope.index=0;
            $scope.index2=0;
            
            /*
             * 添加附件--start
             */
            $scope.fileChanged = function(ele){   
                //获取选择的所有文件
                var files = document.querySelector('input[name="files"]').files;
                for (var i=0; i<files.length; i++) {
                    //追加文件
                    fd1.append($scope.index, files[i]);    
                    //追加文件名
                    $scope.names.push({id:$scope.index, name: files[i].name});
                    //文件数量加1
                    $scope.amount=$scope.amount+1;
                    //key值加1
                    $scope.index=$scope.index+1
                  }  
                //传播model变化
                $scope.$apply(); 
            }
            $scope.fileChanged2 = function(ele){   
                //获取选择的所有文件
                var files2 = document.querySelector('input[name="files2"]').files;
                for (var i=0; i<files2.length; i++) {
                    //追加文件
                    fd2.append($scope.index2, files2[i]);    
                    //console.log(fd.get('0'))
                    //追加文件名
                    $scope.names2.push({id:$scope.index2, name: files2[i].name});
                    //文件数量加1
                    $scope.amount2=$scope.amount+1;
                    //key值加1
                    $scope.index2=$scope.index+1
                  }  
                //传播model变化
                $scope.$apply(); 
            }
            /*添加附件--end*/
            
        /*
         * 删除单个附件--start
         * 参数index:文件名索引
         * 参数t:文件名对象
         */
        $scope.delFile = function(t,index){             
            //删除当前文件
            fd1.delete(t.id);            
            //删除当前文件名
            $scope.names.splice(index,1);
            //文件数量减1
            $scope.amount=$scope.amount-1;                        
        }
        $scope.delFile2 = function(t,index){             
            //删除当前文件
            fd2.delete(t.id);            
            //删除当前文件名
            $scope.names2.splice(index,1);
            //文件数量减1
            $scope.amount2=$scope.amount-1;                        
        }
        /*删除单个附件--end*/
            
        /*
         * 添加函数--start
         * 上传数据,传入后台
         */
        $scope.add = function(){    
            
            //遍历取出剩下的未删除的文件,添加到fd
            for(var i=0;i<$scope.names.length;i++){
                $scope.id=$scope.names[i].id;
                fd.append('files',fd1.get($scope.id));
                console.log(fd.get('files'))
            }
            for(var i=0;i<$scope.names2.length;i++){
                $scope.id=$scope.names2[i].id;
                fd.append('files2',fd2.get($scope.id));
                console.log(fd.get('files2'))
            }                        
            
            //往后台传递添加的数据
            $http({
                method:'POST',
                url  : 'http://192.168.100.121:8080/asset/addRepository',
                data: fd,  //文件
                headers: {'Content-Type':undefined},
                transformRequest: angular.identity
            }).success(function (response) {
                //上传成功,提示信息,然后跳转到record.html页面
                layer.msg('上传成功', {
                    time: 1000, 
                    icon: 1
                });    
                fd = new FormData();

            }).error(function () {

                //上传失败,提示信息
                layer.msg('上传失败', {
                    time: 1000, 
                    icon: 2
                });    
               });
        };    
        /*添加函数--end*/
        
        /*
         * 清空文件--start
         */
        $scope.qinkong = function() {
                $scope.names=[];
                $scope.amount=0;
                fd1=new FormData();
                var file = document.getElementById("fileInput");
                if (file.outerHTML) {
                    file.outerHTML = file.outerHTML;
                } else {
                    file.value = "";
                    
                }
        };
        
        $scope.qinkong2 = function() {
                $scope.names2=[];
                $scope.amount2=0;
                fd2=new FormData();
                var file = document.getElementById("fileInput");
                if (file.outerHTML) {
                    file.outerHTML = file.outerHTML;
                } else {
                    file.value = "";
                    
                }
        };
        /*清空文件--end*/
    });
    </script>
</html>

文件上传指的是一次上传多文件,而不是一次只上传一个文件。下面我会分别介绍前端和后端的实现方式。 前端实现: 前端通常使用HTML中的`<input type="file" multiple>`元素来实现多文件上传功能,其中`multiple`属性表示允许选择多个文件。用户选择文件后,前端会将文件信息存储在FormData对象中,然后通过ajax请求将FormData对象发送到后端。 示例代码: ```html <form id="file-form"> <input type="file" id="file-input" multiple> <button type="submit">上传文件</button> </form> <script> const form = document.getElementById('file-form'); const fileInput = document.getElementById('file-input'); form.addEventListener('submit', (e) => { e.preventDefault(); const formData = new FormData(); for (let i = 0; i < fileInput.files.length; i++) { formData.append('files', fileInput.files[i]); } fetch('/upload', { method: 'POST', body: formData }) .then(response => { console.log(response); }) .catch(error => { console.error(error); }); }); </script> ``` 后端实现: 后端通常使用框架提供的文件上传中间件来处理文件上传,例如Node.js中的`multer`中间件。后端接收到前端发送的FormData对象后,通过中间件解析出文件信息,然后将文件保存到指定目录。 示例代码(使用Express框架和multer中间件): ```javascript const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.array('files'), (req, res) => { console.log(req.files); res.send('上传成功'); }); app.listen(3000, () => { console.log('服务已启动'); }); ``` 在上面的示例中,`multer`中间件的`upload.array('files')`表示接收名为`files`的文件数组。在处理上传成功后,后端会返回一个响应,告诉前端上传成功。 需要注意的是,在上传大文件时,为了避免内存溢出,通常需要对文件进行分片上传和断点续传等优化处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值