最近 在asp.net MVC 项目 需要实现一个Excel和 图片上传功能。之前有使用过SWFUpload 做过上传图片功能,在本次实现过程中,有人推荐WebUploader 上传组件,因此采用web-Uploader 来实现文件上传功能。

WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。采用大文件分片并发上传,极大的提高了文件上传效率。

关于WebUploader上传 ,百度有一个例子 ,不过 按照百度给出的流程 ,并不能实现上传功能。同时为了实现下载功能,需要返回文件上传后 的地址,许多博客都有关于如何使用WebUploader 上传文件 ,都没有涉及如何返回 文件下载地址,而且 没有关于asp.net  mvc 的项目。下面 逐步介绍如何利用WebUpload实现文件上传并得到文件地址。

   第一步 下载 Web Uploader 组件

进入WebUploader 官网,下载 组件; 网址: http://fex.baidu.com/webuploader/

   第二步 引用 Web Uploader 和Jquery文件

参考官网  Getting Started : 引入资源  :使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF.

  1. webuploader.js,Uploader.swf,webuploader.css 拷贝至项目中,分别放在特定位置,本例子中,将webuploader.js,Uploader.swf 放在文件夹 "JS"中.webuploader.css放入文件夹
    "CSS"中,同时项目需要用到Jquery ,这里引用了 juqery-1.10.2.js 并将文件放入"JS"文件夹。不同版本的Jquery 可能会出现一些小问题.本例子为asp.net mvc5 例子,此页面为在Home控制器下
    新建ActionResult Excel方法的视图 Excelcshtml.
  1. <link href="~/CSS/webuploader.css" rel="stylesheet" />
  2. <script src="~/JS/jquery-1.10.2.js"></script>
  3. <script src="~/JS/webuploader.js"></script>

  第三步  创建上传文件的按钮等html元素

这里采用官网提供示例 ,同时添加一个下载a标签,将href 设置为空。

  1. <div id="uploader" class="wu-example">
  2. <!--用来存放文件信息-->
  3. <div id="thelist" class="uploader-list"></div>
  4. <div class="btns">
  5. <div id="picker">选择文件</div>
  6. <button id="ctlBtn" class="btn btn-default">开始上传</button>
  7. </div>
  8. </div>
  9.  
  10. <a href="" id="download">下载</a>

第四步  初始化WebUpload组件, 改造文件上传成功后函数

新创建Javascript文件 uploadExcel.js ,写以下代码

  1. $(function () {
  2. var $ = jQuery,
  3. $list = $('#thelist'),
  4. $btn = $('#ctlBtn'),
  5. state = 'pending',
  6. uploader;
  7.  
  8. uploader = WebUploader.create({
  9.  
  10. // 不压缩
  11. resize: false,
  12.  
  13. // swf文件路径
  14. swf: 'JS/Uploader.swf',//文件存放在JS文件夹
  15.  
  16. // 文件接收服务端。
  17. server: 'UploadExcel',//本例子 asp.net mvc5 例子 页面为 Home下Excel
  18. //在HomeControl控制器 添加了ActionResult UploadExce(HttpPostedFileBase file)
  19. // 选择文件的按钮。可选。
  20. // 内部根据当前运行是创建,可能是input元素,也可能是flash.
  21. pick: '#picker',
  22. //默认文件设置
  23. accept: {
  24. title: 'Excel',
  25. extensions: 'xls,xlsx',
  26. mimeTypes: 'xls/*'
  27. }
  28. });
  29.  
  30. // 当有文件添加进来的时候
  31. uploader.on('fileQueued', function (file) {
  32. $list.append('<div id="' + file.id + '" class="item">' +
  33. '<h4 class="info">' + file.name + '</h4>' +
  34. '<p class="state">等待上传...</p>' +
  35. '</div>');
  36. });
  37.  
  38. // 文件上传过程中创建进度条实时显示。
  39. uploader.on('uploadProgress', function (file, percentage) {
  40. var $li = $('#' + file.id),
  41. $percent = $li.find('.progress .progress-bar');
  42.  
  43. // 避免重复创建
  44. if (!$percent.length) {
  45. $percent = $('<div class="progress progress-striped active">' +
  46. '<div class="progress-bar" role="progressbar" style="width: 0%">' +
  47. '</div>' +
  48. '</div>').appendTo($li).find('.progress-bar');
  49. }
  50.  
  51. $li.find('p.state').text('上传中');
  52.  
  53. $percent.css('width', percentage * + '%');
  54. });
  55. //上传成功后 重点在这里 在官网提供的例子中没有提及 可以有第二个参数 respose
  56. // 在本例子中,返回的是文件地址,response 可以根据不同需求 进行修改
  57. uploader.on('uploadSuccess', function (file, resporse) {
  58. $('#' + file.id).find('p.state').text('已上传');

  59. $("#download").attr("href", resporse.filepath)//对a标签 href 赋值
  60.  
  61. });
  62.  
  63. uploader.on('uploadError', function (file) {
  64. $('#' + file.id).find('p.state').text('上传出错');
  65. });
  66.  
  67. uploader.on('uploadComplete', function (file) {
  68. $('#' + file.id).find('.progress').fadeOut();
  69.  
  70. });
  71.  
  72. uploader.on('all', function (type) {
  73. if (type === 'startUpload') {
  74. state = 'uploading';
  75. } else if (type === 'stopUpload') {
  76. state = 'paused';
  77. } else if (type === 'uploadFinished') {
  78. state = 'done';
  79. }
  80.  
  81. if (state === 'uploading') {
  82. $btn.text('暂停上传');
  83. } else {
  84. $btn.text('开始上传');
  85. }
  86. });
  87.  
  88. $btn.on('click', function () {
  89. if (state === 'uploading') {
  90. uploader.stop();
  91. } else {
  92. uploader.upload();
  93. }
  94. });
  95. });
  1.   

第五步  在Home控制器中添加 UploadExcel 方法 

本例,将文件存储在文件夹Data/Excel 中,同时,在添加文件时,将文件存在 年/月/日 下。

  1. public ActionResult UploadExcel(HttpPostedFileBase file)
  2. {
  3. string fileName = string .Empty;//文件名
  4. string dir = string.Empty;//文件相对路径
  5. if (file != null)
  6. {
  7. fileName = Path.GetFileName(file.FileName);
  8. string fileExt = Path.GetExtension(fileName);//文件扩展名
  9. if (fileExt == ".xls" || fileExt == ".xlsx")
  10. {
  11. //文件存储在Data/Excel/年/月/日 下
  12. dir = "\\Data\\Excel\\" + DateTime.Now.Year + "\\" + DateTime.Now.Month + "\\" + DateTime.Now.Day;
  13. string newfilepath = System.Web.HttpContext.Current.Server.MapPath(dir);//获取物理路径,很重要
  14. if (!Directory.Exists(newfilepath)) // 创建文件夹
  15. {
  16. Directory.CreateDirectory(newfilepath);
  17. }
  18. string path = newfilepath + "\\" + fileName; //真实地址
  19. file.SaveAs(path);//存储文件
  20. }
  21.  
  22. }
  23.  
  24.  return   Json(new    {

         jsonrpc = "2.0",
        filePath = dir + "/" + fileName //相对位置
         });//返回文件存储相对路径 在进行文件下载时 地址必须为相对地址  //之前 ,将地址返回为绝对路径 。程序报错 ,大意为: 程序不能访问该文件, 百度后,说将文件夹权限设置为 :”完全控制

  1. //尝试了无数次 均已失败告终, 这里最好设置相对路径,
  2. }

第六步   在Excel.Cshtml 中添加 UploadExcel.js , 最终运行

  1. <script src="~/JS/UploadExcel.js"></script>

启动调试 ,输入 Home/excel ,选择中国省市数据库大全 .xls

点击下载

    总结

       最终实现了在Asp.net MVC 项目  利用 WebUploader 上传Excel文件, 并得到文件路径 可以点击链接下载。

webuploader 上传文件 生成链接下载文件的更多相关文章

  1. SecureCRT上传、下载文件 使用rz【上传】& sz【下载】命令

    首先安装:apt-get install lrzsz SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能.比ftp命令方便多了,而且服务器不用再开FTP服务了.rz,sz是便是L ...

  2. webuploader+上传文件夹

    在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...

  3. 前端js怎么实现大文件G级的断点续传(分块上传)和分段下载

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

  4. JavaWeb多文件上传及zip打包下载

    项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分.  首先明确一点:  无法通过页面的无刷新ajax请求,直接发下载.上 ...

  5. webuploader 上传文件参数设置

    webUploader 是款很好用的优秀的开源上传组件,由百度公司开发,详细的介绍可参见webUploader 的官方文档: 最近在使用webUploader时,需要添加额外的参数,并在后台获取,参数 ...

  6. thinkphp对文件的上传,删除,下载操作

    工作需要,整理一下最近对php的学习经验,希望能对自己有帮助或者能帮助那些需要帮助的人. thinkphp对文件的操作,相对来说比较简单,因为tp封装好了一个上传类Upload.class.php 废 ...

  7. C#实现多文件上传,写到文件夹中,获取文件信息以及下载文件和删除文件

    前台:.js //上传附件 function uploadAttachment() { if ($("#Tipbind").attr('checked')) { var ip = ...

  8. webUploader上传大视频文件相关web.config配置

    在webuploader上传大文件时必须配置一下,不然请求后台处理程序时,会请求超时.出现404! <system.web> <httpRuntime maxRequestLengt ...

  9. 使用WebUploader上传HTML文件并读取文件

    需求: 前端需要上传HTML文件并识别里面有多少个特殊标签并录入到数据库. 思路: 使用WebUploader上传文件,然后使用FileReader接口和DOMParser识别HTML中的特殊标签 资 ...

随机推荐

  1. FFMpeg for PHP

    PHP使用FFMpeg来转换视频格式.Github上搜索FFMPEG,到https://github.com/PHP-FFMpeg/PHP-FFMpeg. For Windows users : Pl ...

  2. String、StringBuffer、与StringBuilder的区别

    转载自博客园,原文链接:String.StringBuffer.与StringBuilder的区别 相信大家都知道StringBuffer.StringBuilder,但是这两个的用法都差不多,到底有 ...

  3. MySQL架构篇(一)

    MySQL复制解决了什么问题? 1.实现在不同服务器上的数据分布 2.利用二进制日志增量进行 3.不需要太多的带宽 4.但是使用基于行的复制在进行大批量的更改时会对带宽带来一定的压力,特别是跨IDC环 ...

  4. duilib界面库学习(仿PC微信界面,有服务器,有数据库,可以网络通信)

    客户端代码:https://github.com/TTGuoying/duilib_ChatClient 服务器代码:https://github.com/TTGuoying/duilib_ChatS ...

  5. nignx

    1.   什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够 ...

  6. java Socket实现简单在线聊天(三)

    在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊. 在实 ...

  7. Flex中的FusionCharts 2D饼图

    1.设计思路 (1)FusionCharts中有Flex组件文件FusionCharts.swc,这样可以让FusionCharts用Flex展示出来: (2)利用xmlns:components=& ...

  8. CSS3之Border-radius

    1.属性介绍 border-radius:none|12.3px,取值不可为负数,表示边框圆角 相关属性:border-top-right-radius , border-bottom-right-r ...

  9. CentOS添加磁盘分区

    (这里的磁盘在vmware workstation VM中添加) 1.关闭虚拟机,在虚拟机设置中添加一个硬盘,然后开启虚拟机. 2.使用fdisk -l命令查看,这时会发现一个为被使用的设备,有2G的 ...

  10. 异常-----freemarker.template.TemplateException

    一,案例一 1.1.错误描述 五月 30, 2014 11:33:57 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Templ ...