精华内容
下载资源
问答
  • 主要介绍了MVC文件上传支持批量上传拖拽及预览文件内容校验功能,需要的朋友可以参考下
  • md5文件内容校验

    2020-01-03 17:33:56
    引用包 <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.13</version>...

    引用包

            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.13</version>
            </dependency>

    代码:

     String fmSign = DigestUtils.md5Hex(file.getInputStream());

     

    展开全文
  • 我们需要校验上传文件在传输过程中是否被注入脚本或者是被修改,所有采用md5 算法+ 文件内容生成一个识别码,传递给后端,让后端判断文件是否发生修改或变更。 import java.io.File; import java.io.IOException; ...

    1、业务场景:实现文件上传功能时。我们需要校验上传文件在传输过程中是否被注入脚本或者是被修改,所有采用md5 算法+ 文件内容生成一个识别码,传递给后端,让后端判断文件是否发生修改或变更。

    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.nio.file.Files;
    import java.nio.file.StandardOpenOption;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * 上传文件校验工具类
     * @author zzg
     *
     */
    public class UploadFileUtil {
    	// 密码提花
    	private static final char[] hexCode = "0123456789ABCDEF".toCharArray();
    	
    	// 文件类取MD5
        public static String calcMD5(File file){
            try (InputStream stream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) {
                return calcMD5(stream);
            }catch (IOException e) {
                e.printStackTrace();
                return "";
            }
        }
        // 输入流取MD5
        public static String calcMD5(InputStream stream) {
            try {
                MessageDigest digest = MessageDigest.getInstance("MD5");
                byte[] buf = new byte[8192];
                int len;
                while ((len = stream.read(buf)) > 0) {
                    digest.update(buf, 0, len);
                }
                return toHexString(digest.digest());
            } catch (IOException e) {
                e.printStackTrace();
                return "";
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                return "";
            }
        }
    
        public static String toHexString(byte[] data) {
            StringBuilder r = new StringBuilder(data.length * 2);
            for (byte b : data) {
                r.append(hexCode[(b >> 4) & 0xF]);
                r.append(hexCode[(b & 0xF)]);
            }
            return r.toString();
        }
    	
    }

     

    展开全文
  • 网站中的上传相信大家都不陌生,也算是一个小小的技术难点,尤其时在asp.net中,上传的一些大小限制以及上传的进度的控制,以及用户体验等方面,今天在这里分享一个在asp.net mvc模式下的文件上传,同样适用于其它...

    网站中的上传相信大家都不陌生,也算是一个小小的技术难点,尤其时在asp.net中,上传的一些大小限制以及上传的进度的控制,以及用户体验等方面,今天在这里分享一个在asp.net mvc模式下的文件上传,同样适用于其它web类型bootstrap-fileinput ,

    它来自一个开源项目 git:https://github.com/kartik-v/bootstrap-fileinput/

    文档地址:http://plugins.krajee.com/file-input 

    用一个下午的时间将文档通读了一次,并且做了根据文档指示做出了一个小型的demo,效果出奇的好,如下是效果图:

    可以对文件预览筛选,从客户端就过滤一些不适用的文件,而且界面效果还特别美观

    如下是使用方式:或者直接参照代码写就可以

    使用方式:

    1.nuget:Install-Package bootstrap-fileinput

     

    2.语言本地化{下载fileinput_locale_zh.js}或者修改Fileinput中的本地化词汇

    下载地址:https://github.com/kartik-v/bootstrap-fileinput/tree/master/js/locales  【中文是zh.js】

    文档结构:

    3.文件大小限制:修改fileinput.js中的3195行 maxFilePreviewSize配置节点

    maxFilePreviewSize: 25600, // 25 MB  默认是25M,根据需要手动调整

    示例:前台  --代码中的注释已经足够解释各配置项的作用,就不赘述了.

    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <script src="~/Scripts/jquery-1.9.1.js"></script>
        <script src="~/Scripts/bootstrap.js"></script>
        <link href="~/Content/bootstrap.css" rel="stylesheet" />
        <script src="~/Scripts/fileinput.js"></script>
        <script src="~/Scripts/fileinput_locale_zh.js"></script>
        <link href="~/Content/bootstrap-fileinput/css/fileinput.css" rel="stylesheet" />
        <script type="text/javascript">
            $(function () {
                var control = $("#txt_file");
                var uploadrul = "/Home/UploadFile";
                control.fileinput({
                    language: 'zh', //设置语言
                    uploadUrl: uploadrul, //上传的地址
                    allowedFileExtensions: ['xml','docx'],//接收的文件后缀
                    showUpload: true, //显示批量上传按钮
                    showCaption: false,//是否显示标题
                    browseClass: "btn btn-primary", //按钮样式     
                    dropZoneEnabled: true,//是否显示拖拽区域
                    //minImageWidth: 50, //图片的最小宽度
                    //minImageHeight: 50,//图片的最小高度
                    //maxImageWidth: 1000,//图片的最大宽度
                    //maxImageHeight: 1000,//图片的最大高度
                    //maxFileSize: 0,//单位为kb,如果为0表示不限制文件大小
                    //minFileCount: 0,
                    maxFileCount: 100,
                    enctype: 'multipart/form-data',
                    validateInitialCount: true,
                    previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
    
                    msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
                });
                //导入文件上传完成之后的事件
                $("#txt_file").on("fileuploaded", function (event, data, previewId, index) {
    
                });
            });
        </script>
    </head>
    <body>
        <div> 
            <form>
                <div>
                    <div class="modal-header">
                        <h4 class="modal-title" id="myModalLabel">[请选择xml/docx]文件</h4>
                    </div>
                    <div class="modal-body">
                        <input type="file" name="txt_file" id="txt_file" multiple class="file-loading" />
                    </div>
                </div>
            </form>
        </div>
    </body>
    </html>

    后台:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.IO;
    using System.Xml;
    using System.Xml.Schema;
    namespace UploadTest.Controllers
    {
        public class HomeController : Controller
        {
            //
            // GET: /Home/
            public ActionResult Index()
            {
                return View();
            }
            public JsonResult UploadFile()
            {
                uploadResult result = new uploadResult();
                var oFile = Request.Files["txt_file"];
                result.fileName = oFile.FileName;
                Stream sm = oFile.InputStream;
                byte[] bt= new byte[sm.Length];
                sm.Read(bt, 0, (int)sm.Length);
                FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory+oFile.FileName,FileMode.Create);
                fs.Write(bt, 0, bt.Length);
                fs.Close();
                fs.Dispose();
                sm.Close();
                sm.Dispose();
                return Json(result, JsonRequestBehavior.AllowGet);
            }
            public class uploadResult
            {
                public string fileName { get; set; }
                public string error { get; set; }
            }
        }
    }

    为了在前台正确的显示文件的错误信息,需要给前台返回一个带有error字段的json,其中error字段时必须的,否则无法显示后台回写的错误消息【这时必须的,官方文档中明确指出】

    后台可以做到更细致的控制,并且支持多线程上传。

     

    转载于:https://www.cnblogs.com/zzfstudy/p/6339409.html

    展开全文
  • AntD框架选择上传文件校验信息使用场景解决思路注意事项实现代码后记 使用场景 使用a-upload提交文件时,往往会携带其他需要手动输入的信息,a-upload组件本身虽然提供了上传前校验的方法beforeUpload,但该方法是...

    AntD框架选择上传文件前校验信息

    使用场景

    使用a-upload提交文件时,往往会携带其他需要手动输入的信息,a-upload组件本身虽然提供了上传前校验的方法beforeUpload,但该方法是在选择文件后才会进行,这是官方文档的描述:

    上传文件之前的钩子,参数为上传的文件,若返回 false 则停止上传。支持返回一个 Promise 对象,Promise 对象 reject 时则停止上传,resolve 时开始上传( resolve 传入 File 或 Blob 对象则上传 resolve 传入对象)。注意:IE9 不支持该方法。

    如果用户想要在选择上传文件之前校验(如input输入框的内容是否符合规则)则该方法无法支持

    解决思路

    用@change方法监控需要校验的内容,当内容不通过校验时上传按钮不启用,通过校验后点击上传按钮才可以上传文件

    注意事项

    onChange方法中不要使用vue的双向绑定获取校验内容,因为onChange触发时的实际内容为输入前的值,由此可见这样都比较不好,所以antd给你提供了e,目的就是想让你当前输入用e.target.value来获取 而不是用getFieldValue获取当前输入值。

    实现代码

    页面部分代码

    <a-form :form="excelform" autocomplete="off">
        <!-- 示例,上传文件前要校验姓名电话必须填写 -->
        <a-form-item :md="8" :sm="24" label="姓名">
            <a-input @change="checkUpload($event.target.value, 0)" :v-model="username" name="username" />
        </a-form-item>
        <a-form-item :md="8" :sm="24" label="电话">
            <a-input @change="checkUpload($event.target.value, 1)" :v-model="usertel" maxLength="11" name="usertel" />
        </a-form-item>
    </a-form>
    <!-- 未通过校验时,按钮点击功能为校验和提示,已通过校验是按钮功能为上传,使用同一个标志位来控制两个不同功能的按钮不会一起显示 -->
    <a-button v-show="!isUpload" type="primary" style="margin-bottom:10px;" @click="beforeUploadCheck">excel导入</a-button>
    <a-upload v-show="isUpload" accept=".xls,.xlsx" :showUploadList="false" :customRequest="selfUpload" :beforeUpload="beforeUpload" ref="upload">
        <a-button ref="beforeUpload" type="primary" style="margin-bottom:10px;">excel导入</a-button>
    </a-upload>
    

    onChange监听部分代码

    checkUpload(value, type) {
    	//由于运营商在不断申请新号段,实际项目中不建议将手机号校验做的太过细致
        var moblieCheck = /^1\d{10}$/;
        if(type == 1){
            if(this.username == null || this.username == ''){
                this.isUpload = false;
                return ;
            }
            if(!moblieCheck.test(value)){ //此处不要使用vue的双向绑定获取当前内容,使用@change传递的数据
                this.isUpload = false;
                return ;
            }
        }else{
            if(value == null || value == ''){  //此处不要使用vue的双向绑定获取当前内容,使用@change传递的数据
                this.isUpload = false;
                return ;
            }
            if(!moblieCheck.test(this.usertel)){
                this.isUpload = false;
                return ;
            }
        }
        this.isUpload = true;
    },
    

    校验和提示部分代码

    beforeUploadCheck(){
        if(this.username == null || this.username == ''){
            this.isUpload = false;
            this.$message.error('姓名必须填写');
            return ;
        }
        //由于运营商在不断申请新号段,实际项目中不建议将手机号校验做的太过细致
        var moblieCheck = /^1\d{10}$/;
        if(!moblieCheck.test(this.usertel)){
            this.isUpload = false;
            this.$message.error('电话号码格式不正确');
            return ;
        }
    }
    

    校验文件,这里是校验文件是excel

    beforeUpload(file) {
        const isExcel =
            file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type == 'application/vnd.ms-excel';
        //此处需要特别注意,使用file.type进行校验是不可靠的,并非所有系统和浏览器都能获取file.type的信息,比如同为chrome,在mac环境是无法获取到file.type的
        var suffix = file.name.substr(file.name.lastIndexOf("."));
        if (!isExcel && (".xls" != suffix && ".xlsx" != suffix)) {
            this.$message.error('请上传excel文件');
        }
        const isLt2M = file.size / 1024 < 20000 && file.size / 1024 > 5;
        if (!isLt2M) {
            this.$message.error('文件大小应在10KB~20MB之间');
        }
        return isExcel && isLt2M;
    }
    

    上传文件方法

    selfUpload({ action, file, onSuccess, onError, onProgress }) {
        let formData = new FormData();
        formData.append('file', file);
        formData.append('username', this.username);
        formData.append('usertel', this.usertel);
        excelUpload(formData)  //上传文件的js,这里不放出了
            .then(res => {
                if (res == 200) {
                    this.$message.success('操作成功');
                }else{
                    this.$message.error('操作失败');
                }
            })
            .finally(() => {
                //处理无论成功失败必定进行的代码
            });
    }
    

    后记

    作为adnt框架的新手,在想到需要选择文件前进行校验的需求后查阅官方文档并没有得到满意的结果,于是自己想出了这么一个“偏门”的解决方案达到了近似的效果

    展开全文
  • 从FTP、SFTP下载的文件做MD5码校验,文件名和MD5码值存放在表格里,表格位置在FTP、SFTP服务器上。 os模块只能遍历本地目录/文件,需要先连接FTP、SFTP服务器,将表格下载到本地localpath,再将localpath传入exl_...
  • Host配置域名 hosts文件在C:\Windows\System32\drivers\etc。... Nginx Nginx配置一个单独的图片服务器路由,指定他的物理存储路劲 配置文件: ...Service层 对File类型的校验文件内容校验。 @Servi
  • 1.背景测试文件地址:https://ifiletest.XXX.com/mis/temp/settlement/csv/settlement_cost/rentingexpenseitem1554975619468.xlsx目的:读取Excel文件内容,对单元格的值做校验针对不同的Excel版本,要采用不同的...
  • Vue上传Excel文件校验Excel内容

    千次阅读 2019-03-29 14:16:09
    在近期开发的学校管理系统中,有一个导入管理模块,其中包含Excel的上传功能,由用户选择文件后进行上传,前端需要对文件内容进行初步校验后给出是否符合规范的提示后再传给后端。这就需要前端事先对Excel文件内容...
  • md5sum 命令用于计算文件内容的md5值, 是对文件内容逐位计算, 和文件名无关, 因此可以用于文件内容对比, 文件校验. 在进行文件的网路传输时, 可能会由于网络等问题导致丢失数据, 或担心数据包被篡改, 因此当下载文件...
  • CSV文件乱码校验

    2017-09-07 11:52:34
    CSV文件乱码校验,原理是基于文件前4个字符,如要修改,只需改字符内容即可。该jar包有几个参数,可以根据自己需要进行修改。本资源仅仅为了分享,请勿商业,谢谢~
  • xsd文件校验xml内容

    千次阅读 2016-12-02 15:07:11
    + " 赋值非法,原因:正则校验不通过.正则表达式为:" + errorMsg.substring(errorMsg.lastIndexOf("pattern") + 9, errorMsg.lastIndexOf("' for type")) + " ,当前值:" + errorMsg.substring(errorMsg....
  • 文件上传校验绕过总结

    千次阅读 2018-09-15 17:47:46
    文件上传校验 前端javascript校验(一般... 文件内容校验(GIF89a) 后缀名黑名单校验 后缀名白名单校验 WAF设备校验(根据不同的WAF产品而定) 其他绕过方式 1.客户端校验  ...
  • 文章目录一、文件幻数介绍二、制作图片木马三、上传图片马四、本地搭建任意文件包含五、文件包含图片马 一、文件幻数介绍 这种方法利用的是每一个特定类型的文件都会有不太一样的开头或者标志位。可以通过比如php...
  • 在使用字符流对文件进行读取时,因为有一些数据的格式要求,格式如下: key1 = value1 key2 = value2  value2_2  value2_3 key3 = value3 ...... 现在要存储为key-value的格式: key1 value1 key2 value2 value2...
  • hash文件校验

    2021-01-20 10:16:15
    import hashlib import os """ mode =>...(1) 针对于小文件进行内容校验 def check_md5(filename): hs = hashlib.md5() with open(filename,mode="rb") as fp: hs.update(fp.read()) return hs
  • linux下文件校验

    2012-03-06 21:54:57
    linux下文件的校验当文件要传送到其他位置,接收方通常需要确定传送过来的数据有没有被修改或者坏...或者在文件备份前产生校验值,恢复的时候再进行校验,以确定文件内容完全相同。使用sum 进行文件的校验[oracle@ze...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,693
精华内容 1,077
关键字:

文件内容校验