精华内容
下载资源
问答
  • function getFilesFromPath(path) { /*格式:H.getFilesFromPath(文件夹路径)*/ /*解释:获取文件夹所有文件和文件夹 递归遍历 返回文件路径数组*/ var arrDir = new Array(); var arrFile = new Array...
    // 此代码由飞云脚本圈www.feiyunjs.com整理提供
    function getFilesFromPath(path) {
        /*格式:H.getFilesFromPath(文件夹路径)*/
        /*解释:获取文件夹所有文件和文件夹 递归遍历 返回文件路径数组*/
        var arrDir = new Array();
        var arrFile = new Array();
        try {
            var rp = /^([/][^\/:*?<>|]+[/]?)+$/;
            if (rp.test(path) == false) throw "非法文件路径,H.getFilesFromPath(?);" + path;
        } catch (err) {
            log(err);
            exit();
        }
        /*获取path目录下所有文件夹和文件*/
        var arr = files.listDir(path);
        /*遍历文件和文件夹*/
        for (var i = 0; i < arr.length; i++) {
            /*连接路径*/
            newPath = files.join(path, arr[i]);
            /*判断路径类型*/
            if (files.isDir(newPath)) {
                arrDir.push(newPath);
                /*递归遍历文件夹*/
                var arrF = getFilesFromPath(newPath);
                arrDir = arrDir.concat(arrF);
            } else if (files.isFile(newPath)) {
                arrFile.push(newPath);
            }
        }
        /*按字母升序排序数组*/
        arrDir.sort();
        arrFile.sort();
        /*连接数组并返回*/
        return arrDir.concat(arrFile);
    }
    

    说明

    本文提供的代码仅供参考。不建议用于生产环境。
    可能有些地方在最新版本的Auto.js上面需要做修改,才能运行。

    Auto.js简介

    Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。
    与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找窗口句柄来实现的。

    Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。

    推荐教程

    Auto.js Pro安卓全分辨率免ROOT引流脚本开发视频教程(HD超清1080p)

    开发文档

    Auto.js Pro开发文档
    文档尚在完善中,可能有文档描述和代码实际行为有出入的情况。

    为什么要使用Auto.js Pro开发脚本,有什么特点?

    吸引我使用Auto.js Pro的原因有很多。最主要的几个原因是:

    • Auto.js Pro能开发免ROOT的安卓脚本
    • Auto.js Pro基于节点操作,能开发全分辨率的脚本,自动适配各种安卓机型
    • Auto.js Pro丰富的UI组件,能自定义各种样式的安卓界面
    • Auto.js Pro使用的javascript的语法比较优雅,代码可读性强
    • Auto.js Pro的命令库非常的丰富,接口比较多
    • Auto.js Pro脚本文件体积比较小。1000行的代码,打包后的apk文件只有3-5M,还没有广告
    展开全文
  • 需求:将指定路径下的文件夹及文件筛选出符合条件的文件并打包下载。 注意:php的mvc结构可以通过控制器添加header头去下载,但是通过前端Ajax请求接口的话就不能用此方法,因为不管是json数据还是二进制文件都会被...

    需求:将指定路径下的文件夹及文件筛选出符合条件的文件并打包下载。

    注意:php的mvc结构可以通过控制器添加header头去下载,但是通过前端Ajax请求接口的话就不能用此方法,因为不管是json数据还是二进制文件都会被浏览器当成字符串处理。

    并且,header下载完可以直接unlink删除压缩包,js的话没办法立即删除,只能回调成功下载文件后在调用删除接口,或者可以将压缩的文件名写到数据库,然后在写一个方法去执行数据库逻辑删除,或者crontab定时物理删除,或者干脆不管它,反正每次压缩前会先检查是否存在执行删除操作。等等。

    1、Ajax调用的控制器接口,基于laravelC

    public function download(Request $request){  
          $data = $request->json()->all();
          $uuid = $data['uuid'];
          $source_file_path = "./upload/".$uuid;  //需要遍历的文件夹地址
          if(!is_dir($source_file_path)){  //检查目录是否存在
                return response()->json(['status' => '403']);
          }
          $des_file_path = storage_path("zip/".$uuid.".zip"); //目的路径
    
          if(file_exists($des_file_path)){  //重新生成文件
               unlink($des_file_path);
          }
          $zip=new \ZipArchive();
          if($zip->open($des_file_path, \ZipArchive::OVERWRITE) === TRUE){
               $this->addFileToZip($source_file_path, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
               $zip->close(); //关闭处理的zip文件
               if(!file_exists($des_file_path)){
                    return response()->json(['status' => '404','msg'=>'没有查询到符合条件的文件']);
                    //exit('无法找到文件'); //即使创建,仍有可能失败  比如没有符合条件的file,就没有addfile,如果你遍历文件夹没有添加过滤条件,则可以忽略此if判断
                }
    
    //如果不是Ajax请求,可以直接通过注释的header去下载
    //                header("Cache-Control: public");
    //                header("Content-Description: File Transfer");
    //                header("Content-Type: application/zip");     //zip格式的
    //                header("Content-Transfer-Encoding: Binary"); //告诉浏览器,这是二进制文件
    //                header('Content-Disposition: attachment; filename='.basename($des_file_path)); //文件名
    
    //                header('Content-Length:'.filesize($des_file_path)); //告诉浏览器,文件大小
    //                @readfile($des_file_path);
    //                unlink($des_file_path);删除压缩包
    //                exit;
            }else{
                 exit('无法打开文件,或者文件创建失败');
            }
           
            $download_file_path = "/Project/storage/zip/".$uuid.".zip";//js回掉的文件路径
            return response()->json(['url' => $download_file_path],200,[],JSON_UNESCAPED_SLASHES);
    }

    2、控制器用到的addFileToZip方法(遍历文件夹),可以写到助手函数里面去

    public function addFileToZip($path,$zip){
            //定义一个数组,可以打印调试,列出所有符合条件的文件
            //$files = array();
    
            $handler=opendir($path); //打开当前文件夹由$path指定。
            while(($file = readdir($handler)) !== false){
                if($file != "." && $file != ".."){ //文件夹文件名字为'.'和‘..',不要对他们进行操作
                    if(is_dir($path."/".$file)){ // 如果读取的某个对象是文件夹,则递归
                        $this->addFileToZip($path."/".$file, $zip);
                    }else{ //将文件加入zip对象
                     //此处else写你想要过滤文件的条件代码,比如根据时间戳做一些操作,filectime 
    //                        $files[] = $path . "/" . $file; 
                            $zip->addFile($path."/".$file,$file);  //将遍历的文件添加到要压缩的zip里,第二个参数指定文件所在的文件夹名local_name(最终生成的文件名,如果本身文件就是zip包,再压缩需要加zip后缀)
    
    //                    $path_arr = explode("/",$path);
    //                    $prefix_file = $path_arr[count($path_arr)-1];
    //                    $zip->renameName($path."/".$filename,$prefix_file.'/'.$file);//$prefix_file是指定压缩文件所在的文件夹名,不要的话,表示所有的文件同级,renameName等同于addFile方法的第二个参数。如果你的路径文件夹是最后一级(即目录下全是文件,无目录),就忽略前缀$prefix_file
                    }
                }
            }
            @closedir($path);
        }

    3、前端调用接口

    $.ajax({
           type:"POST",
           url:"download",//你的路由地址
           dataType:"json",
           async: false,
           data:JSON.stringify({"uuid":123456789}),
           success:function (result) {
                   if("404"==result.status){
                        alert(result.msg);
                   else{
                        window.open("" +result.url);
    //                  window.location.href=result.url
                   }
           }
    })

    备注:为什么js不能用header去下载?看这儿    情况和他描述的并无二致。

    问题:

    有时候open()方法会报错,我在php5.5版本使用正常,php7.2反而报错,返回状态码 9,表示没有此文件。具体原因未知。

    \ZipArchive::open($file_path, \ZipArchive::OVERWRITE)

    查询php.net官方Link,提供两种办法,其实结果应该都一样,| 表示左 | 位运算符:

    这样以后,就可以正常下载了,或者根据文件是否存在进行三元判断是使用create还是overwrite也可以。

    if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) 
    {
    	return false;
    }

     

    展开全文
  • webpack在打包的时候可以借助assets-webpack-plugin插件形成全部打包文件的json map,不过因为项目需要这个生成的json不能满足我的需要,我们目前需要生成形式为以下的json文件: {"jsFile":...

    根据 http://blog.csdn.net/hero82748274/article/details/45700465这里的思路对读写文件做了一个 封装:

    webpack在打包的时候可以借助assets-webpack-plugin插件形成全部打包文件的json map,不过因为项目需要这个生成的json不能满足我的需要,我们目前需要生成形式为以下的json文件:

    {
    "jsFile":{   "mainSite":"mainSite.js",   "size":"296.28/kb"
    }, "cssFile":{   "mainSite":"mainSite.css",   "size":"32.76/kb" } }

      

    所以用nodejs的fs module实现了这个读写文件的功能,具体如下:

    var fs = require('fs');
    var path = require('path');
    var basePath = path.join(__dirname, 'resources');
    //遍历文件夹,获取所有文件夹里面的文件信息
    
    function geFileList(folderPath,fileName)
    {
        this.folderPath=folderPath; //文件夹路径
        this.fileName=fileName;
        this.filesList = [];
        //遍历读取文件
        this.readFile=function(path) {
            var filesList=this.filesList;
    
            var files = fs.readdirSync(path);//需要用到同步读取
            files.forEach(function(file) {
                var states = fs.statSync(path+'/'+file);
                if(states.isDirectory())
                {
                    this.readFile(path+'/'+file,filesList);
                }
                else
                {
                    //创建一个对象保存信息
                    var obj = new Object();
                    obj.size = states.size;//文件大小,以字节为单位
                    obj.name = file;//文件名
                    obj.path = path+'/'+file; //文件绝对路径
                    this.filesList.push(obj);
                }
            }.bind(this));
        }
    
        //写入文件utf-8格式
        this.writeFile=function(data) {
            fs.writeFile(this.fileName,data,'utf-8',function() {
                console.log("文件生成成功");
            });
        }
        this.formatHandler=function() {
            var filesList=this.filesList;
            var strJSON={
                "jsFile":{},
                "cssFile":{}
            };
            for(var i=0;i<filesList.length;i++)
            {
                var item = filesList[i],
                    thisName=item.name,
                    nameNoSuffix;
    
                if(/\.js$/.test(thisName)) {
                    //判断是否为js文件
                    nameNoSuffix=thisName.split('.')[0];
                    strJSON["jsFile"][nameNoSuffix]=thisName;
                    strJSON["jsFile"]["size"]=(item.size/1024).toFixed(2) +"/kb";
                }
                else if(/\.css$/.test(thisName)) {
                    //判断是否为css文件
                    nameNoSuffix=thisName.split('.')[0];
                    strJSON["cssFile"][nameNoSuffix]=thisName;
                    strJSON["cssFile"]["size"]=(item.size/1024).toFixed(2) +"/kb";
                }
            }
    
            var strJsonObj=JSON.stringify(strJSON);
            this.writeFile(strJsonObj);
        }
        this.init=function() {
            var that=this;
            console.log('test01');
            //判断打包的时候文件路径是否存在
            fs.exists(this.folderPath, function (exists) {
                if(exists) {
                  that.readFile(that.folderPath);
                  that.formatHandler();
                }
            });
        }
    }
    
    module.exports=geFileList;
    

     

    因为我有多个项目在一起管理,需要一次性生成多个项目的json文件,所以每生成一个json文件都得实例化一个函数,比如:

    //生成json map
    // ask json
    var askFileList=new geFileList(outputPath+"/ask",outputPath+'/json-ask.json');
    askFileList.init();
    

     

    //生成json map
    // web json
    var askFileList=new geFileList(outputPath+"/web",outputPath+'/json-web.json');
    askFileList.init();
    

      

    注明:用webpack的插件assets-webpack-plugin生成json,参考地址: https://www.npmjs.com/package/assets-webpack-plugin

        nodeJS的fs module的API: http://javascript.ruanyifeng.com/nodejs/fs.html

      

    转载于:https://www.cnblogs.com/laneyfu/p/6270643.html

    展开全文
  • 2009-03-03 js .net验证控件的代码2008-12-12 这篇文章主要为大家详细解析了.NET MD5加密解密代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-02-02 本篇文章是对.Net 4.0 中委托delegate的使用进行了...

    Silverlight中动态获取Web Service地址

    更新时间:2009年11月24日 18:47:24   作者:

    开发过Silverlight应用的朋友们相信都会遇到这样一个问题

    在使用WCF或者WS进行数据库操作的时候都需要有一个明确的服务地址,如果是WCF就是svc文件地址。初学者通常会直接使用VS的Add Service Reference来添加引用。这的确是十分方便的手段,但是这样会带来什么样的麻烦呢?

    第一,在开发的阶段一旦改变了WS文件的目录结构就必须改变SL工程中的WS地址,而且这种改变并不是单纯的Update Service Reference这么简单,因为地址已经改变了,你必须删掉旧的Reference来添加新的Reference,这是其一。

    第二, 当项目开发完成要部署上去服务器时大问题就来了。如果在开发的时候是用VS的Add Service Reference来添加引用的话,系统会自动生成一个ServiceReferences.ClientConfig的配置文件,里面记录着WS的地址和缓存、连接时长之类的信息,要命的是这个配置文件是连同SL工程一并打包进xap文件里面的,也就是说一旦项目部署到了服务器上之后就不能再改WS的地址了。这对项目的迁移,服务器IP地址的变动都带来十分不利的影响。

    这里介绍一种动态获取WS地址的方法,这种方法不依赖于 ServiceReferences.ClientConfig文件。虽然说不依赖于配置文件,但是开发者仍然需要使用VS的Add Service Reference来添加一次引用,用于生成SL端的操作代码。好了,进入正题,下面是用于生成WSClient的类

    public class ServiceUtil

    {

    public static string SVCPath { set; get; }

    ///

    /// Get Data Service path

    ///

    /// path

    public static WorkflowServiceClient GetDynamicClient()

    {

    if (SVCPath == null)

    throw new Exception("Wrong SVC Path!");

    BasicHttpBinding binding = new BasicHttpBinding(Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);

    binding.MaxReceivedMessageSize = int.MaxValue;

    binding.MaxBufferSize = int.MaxValue;

    return new WorkflowServiceClient(binding, new EndpointAddress(new Uri(Application.Current.Host.Source, SVCPath)));

    }

    }

    上面ServiceUtil类中有一个静态的字符串变量,用来保存WS文件路径;然后下面的GetDynamicClient方法就是把SL应用的宿主网站uri与WS文件路径组合起来形成完整的WS引用URL。这里这个静态变量SVCPath通常是在使用WS操作前赋值,而具体的值可以通过网站Web.config文件的appsetting中字段中传过来,至于怎么在SL工程中获取aspx页面的参数的问题,我在上一篇随笔中有写到,大家可以参考一下。

    相关文章

    1a1b05c64693fbf380aa1344a7812747.png

    这篇文章主要介绍了jQuery实现倒计时跳转的例子,需要的朋友可以参考下2014-05-05

    4f55910a645b073bc4fc65dc10dc14bd.png

    在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现。以下是Bind方法的格式,Eval的格式也是和Bind一样的。 Bind("列的名称","显示的格式文")2009-06-06

    0ea3c7666119d5615e582f823fb3fad6.png

    这篇文章主要介绍了ASP.NET配置文件Web.config用法,详细解读了Web.config配置文件各个节点的含义及用法,需要的朋友可以参考下2014-10-10

    4f96a78db829b1556ff16de21e013c7a.png

    本文主要介绍利用aspnet_regiis.exe工具对web.config中connectionStrings节点进行加密和解密的过程,希望对大家有所帮助。2016-05-05

    8cc1031babc6aff2319f1c6af8544aa0.png

    最近不得不对这个论坛进行研究,以适应后面的发展,现在同事研究太吃力了,以后改些东西,估计又要...打开web项目中的communityserver.config发现一个有趣的地方。2009-03-03

    0c932a99bb7b6f23c937db507070cc7b.png

    js .net验证控件的代码2008-12-12

    cca732bf65a93ed2ec0ac80c638460fe.png

    这篇文章主要为大家详细解析了.NET MD5加密解密代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-02-02

    2d9f31f2af7b675a3d153d2b7f1035a7.png

    本篇文章是对.Net 4.0 中委托delegate的使用进行了详细的分析介绍,需要的朋友参考下2013-05-05

    b452cee8ec5cd9e58ab98eba17281e59.png

    这篇文章主要介绍了ASP.NET中为GridView添加删除提示框的方法,可实现非常人性化的删除提示功能,需要的朋友可以参考下2015-06-06

    f4838ec7e2d4da28e0b57d4e852dadd4.png

    如同交响乐一样,构造软件系统不一定必须某个强大的明星驱动,我们站在历代ADO.NET的肩膀上,更好地回归到SQL Server的核心开发:SQL Server LocalDB 在 ASP.NET中的应用2013-01-01

    最新评论

    展开全文
  • 最近遇到一个问题,如何打包某个文件夹下的所有js文件。 例如我们想打包src下common中的所有js文件。感谢stack overflow上的大神们的解答,为此将方法记录下来: 方式一:用数组将所有要打包js路径写入。 ...
  • Js文件遍历

    2020-04-26 22:59:42
    例如打包后把dist文件夹的静态资源上传到cdn,查询某个文件夹是否存在名为xxx的文件等等。这里介绍的是利用递归的遍历: const getFiles = filePath => { let files = [] //遍历的文件全push进这个数组,方便后续...
  • javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来...
  • JavaScript打包之Webpack

    2020-07-13 22:48:23
    打包:从开发到生产 解决ES Module的浏览器兼容问题,编译ES6+到ES5 解决模块请求频繁的问题,模块打包成一个文件 资源都需要模块化,管理所有资源的依赖关系,便于业务代码与相关资源的统一维护 打包工具 作用:...
  • 项目场景: ...emoji.js是放在utils下的,所以找到需要遍历文件夹 首先遍历emoji文件夹,组成数组对象,对所有emoji图片进行重命名,之后将生成的数据写入list.js中 const fs = require('fs') const pa
  • 所有css打包压缩到一个js里面打包css文件的意义:最终把css文件压缩到最终生成的js文件里,页面不需要再加载css文件,并且是压缩过的打包css文件,安装style-loader css-loadernpm install --save-dev style-loader ...
  • 遍历数组,将图片的url赋值给相应的img的src属性。 问题: 图片没有预期加载出来。 data里面的数据: 查看控制台: 表面上看,路径数据一致,那怎么没有显示图片。 冷静一想,其实这个读取的路径其实是错误的。...
  • 接下来就是打包了: 解析入口文件,遍历所有依赖项 递归解析所有的依赖项,生成一个依赖关系图 使用依赖图,返回一个可以在浏览器运行的 JavaScript 文件 输出到 /dist/bundle.js 四、解析入口文件,遍历所有依赖项 ...
  • Javascript中最常用的55个经典技巧 Javascript中最常用的55个经典技巧1. οncοntextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 linux 下 poll 编程 poll 与 select 很类似,都是对描述符进行遍历...
  • 一、使用JSZIP包来 打包文件或者文件夹 1. node.js安装 jszip(已安装跳过) npm install jszip 2.编写 jszip打包代码 1 let fs = require("fs");//获取文件系统模块,负责读写文件 2 let path = ...
  • 文章来源:小青年原创发布时间:2016-08-01关键词:mui,nativejs,android前言这段时间以来一直有人问5+ sdk怎么在原生中集成,每次给了文档和没给没啥大区别,这部分人之所以不能根据文档写出想要的结果,无非有两...
  • 但是weex是多页面应用,weex在真机上进行运行,是需要weex把对应的vue页面转化为js然后在真机上进行渲染,调用,但是不是所有的vue文件都需要转化为js的,比如我们提取的公共样式,这时在打包的时候就需要我们对vue...
  • 结构展示: 功能展示: 1.使用swiper轮播插件, 2.自动轮播,当前图片高亮小按钮...2.在src文件夹index.js下引入样式,避免打包失败 import Swiper from 'swiper/dist/js/swiper.js' import 'swiper/dist/cs...
  • WebPack打包

    2019-07-29 15:07:22
    一、用webpack打包 新建一个文件夹 webpack-demo 1. 初始化 npm 执行命令 $ npm init (只生成一个package.json文件) 2.安装webpack $ npm install webpack --save-dev (生成node_modules文件夹) 3. 在...
  • 使用 Node.js 编写代码实现遍历文件夹及所有文件名,代码如下所示: // 实现遍历文件下,获取所有的文件 // 这里使用同步的方式比异步的方式简单的多,异步需要回调里面嵌套回调 const fs = require('fs') const ...
  • 1.本地前端调试代码肯定是调用原始的路径以及代码,但是线上运行的肯定是通过打包后的另一个路径,这儿就是生成的dist文件夹了。 2.requirejs的引入,线上跟线下的路径怎么控制?我们是这样控制的,代码如下: &...
  • 1.本地前端调试代码肯定是调用原始的路径以及代码,但是线上运行的肯定是通过打包后的另一个路径,这儿就是生成的dist文件夹了。 2.requirejs的引入,线上跟线下的路径怎么控制?我们是这样控制的,代码如下: <...
  • 使用Node.js编写代码实现遍历文件夹及所有文件名 // 实现遍历文件下,获取所有的文件 // 这里使用同步的方式比异步的方式简单的多,异步需要回调里面嵌套回调 const fs = require('fs') const path = require('path'...
  • 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹。然后调用 RAR程序,对临时文件夹进行压缩,然后输出到客户端。最后删除...
  • 这个文件是打包过程汇总的核心文件,文件中生命的对线webpackConfig也是整个打包过程中的核心对象。 1.导入相关对象 const path = require('path') // 下面是utils工具配置文件,主要用来处理css类文件的loader ...
  • 首先运用nodejs 将需要打包的 json合并成一个json文件,之后,采用了两张打包方式,一种是用JSZIP打包,另一种采用打包工具7z进行打包,发现7z的打包压缩率略高于jszip的压缩率,下面请看代码 1.编写js代码,起名...
  • 本质上,webpack是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些...
  • webpack打包

    2018-05-31 22:11:22
    1.什么是webpackWebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。...
  • 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹。然后调用 RAR程序,对临时文件夹进行压缩,然后输出到客户端。最后删除...
  • 在nw.js入门+桌面应用程序——最易懂的教程中,我介绍了简单的使用nw运行html文件为桌面程序以及将html文件打包为桌面可执行文件exe。 看vuecli创建的工程打包成exe文件可直接从【在vuecli创建的项目基础上增加nw...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,498
精华内容 2,599
关键字:

js打包遍历文件夹