mvc文件上传支持批量上传,拖拽以及预览,文件内容校验等

使用bootstrap-fileinput

使用方式:

1.nuget:Install-Package bootstrap-fileinput

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

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

示例:前台

@{
    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字段时必须的,否则无法显示后台回写的错误消息

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

时间: 2024-08-28 07:56:02

mvc文件上传支持批量上传,拖拽以及预览,文件内容校验等的相关文章

SNF快速开发平台3.0之--文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)

实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制,客户端无刷新 可以对已经上传的附件进行名字变更,改成更友好的名称. 可以对已经上传的文件进行删除. 并记录文件大小,上传人.时间和修改人和时间等. 可以下载附件到本地电脑. 文件的在线预览,支持不安装office软件就可以预览(不管是图片还是office文档都得支持预览) 虽然比专业的图文档管理系统

02 流的方式预览文件

页面预览文件的时候,避免暴露服务器目标文件的所在地址,而是通过一个请求,把文件流直接输出展示. /** * 读取文件 * * @param request * @param response * @param path */ @RequestMapping(value = "/readFile", method = {RequestMethod.POST,RequestMethod.GET}) public void readFile(HttpServletRequest reques

PHP实现阿里云OSS文件上传(支持批量)

上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下: 1.下载阿里云OSS对象上传SDK(PHP版) 通过Github下载 2.解压后,可自行修改目录名称,以下为本人项目实例(aliyun_oss改过之后的名称) 项目目录结构如下: 3.Index.php 为文件上传静态表单页 4.do_upload.php 为文件处理控制页,封装的代码如下:上传文件相关的辅助函数可以自行封装,本文是为了便于

Springmvc+uploadify实现文件带进度条批量上传

网上看了很多关于文件上传的帖子,众口不一,感觉有点乱,最近正好公司的项目里用到JQuery的uploadify控件做文件上传,所以整理下头绪,搞篇文档出来,供亲们分享. Uploadify控件的主要优势是可以实现批量文件上传,并且提供了onSelect(选中文件).onUploadSuccess(上传成功回调函数)等多个事件监听函数,可以操控上传的整个流程. 对uploadify有个简单的了解后,废话不多说,开始吧... (由于这次项目中用到的是ssm框架,所以就以springmvc的后台处理为

html5拖拽事件 xhr2 实现文件上传 含进度条

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <meta charset="utf-8"> <meta name="viewport&

Java Spring Boot 上传文件和预览文件地址解析

@RequestMapping(value ="/upload",method = RequestMethod.POST) @Permission(isAjax=false) public String Upload(HttpServletRequest request, HttpServletResponse response,@RequestParam("files") MultipartFile[] files) { List<String> fi

图片上传,图片旋转,拖拽

能够支持IE,谷歌,火狐浏览器(兼容多浏览器不容易啊) 下面仅提供核心思想和部分代码:  拖拽:是使用网上现成的JS代码,在此基础上进行适当的修改即可满足自己的需求,最主要的就是判定拖拽的范围,上传的图片不能给拖没了,所以加上个范围限定,判断超出了这个范围便拖拽无效果. 旋转与缩放要区分浏览器.. 旋转:IE浏览器下想要实现图片的旋转很简单只要调用IE提供的滤镜filter参数为一个旋转矩阵即可.谷歌和火狐浏览器图片显示用的是canvas标签而不是img标签所以图片的旋转需要用canvas标签相

PHP 上传单张图片  纯 前端界面预览

上传单张图片 预览 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv=&qu

sharepoint 2013不小心把同级文件夹拖拽成子级文件夹如何拖拽回来

今天登陆公司的协同平台,不小心把文档库里面的三个文件夹拖拽到了其他一个同级文件夹下面了,因为sharepoint  2013的拖拽功能,我真的是手误,手误. 因为拥有管理员权限,我不敢随便弄了,因为我发现sharepoint 网站上没有任何地方可以提供我拖拽回来到上一级的文件夹的. 经过思考之后,总结了下面级方法可以拖拽回来. 1  通过资源管理器打开这个sharepoint 网站,之后在资源管理器里面拖拽回来. 比较简单,不截图了,网站左上角--新建文档/上传文档--使用资源管理器打开--资源