文件上传这东西说到底有时候很痛,原来的asp.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示。这次我们演示利用swfupload多文件上传,项目上文件上传是比不可少的,大家这个心里都知道。主要提供给源码说明及下载
最终效果图:
SWFUpload的特点:
1、用flash进行上传,页面无刷新,且可自定义Flash按钮的样式;
2、可以在浏览器端就对要上传的文件进行限制;
3、允许一次上传多个文件,但会有一个上传队列,队列里文件的上传是逐个进行的,服务器端接收文件时跟普通的表单上传文件是一样的;
4、提供了丰富的事件接口供开发者使用;
SWFUpload的文件上传流程是这样的:
1、引入相应的js文件
2、实例化SWFUpload对象,传入一个配置参数对象进行各方面的配置。
3、点击SWFUpload提供的Flash按钮,弹出文件选取窗口选择要上传的文件;
4、文件选取完成后符合规定的文件会被添加到上传的队列里;
5、调用startUpload方法让队列里文件开始上传;
6、文件上传过程中会触发相应的事件,开发者利用这些事件来更新ui、处理错误、发出提示等等;
SWFUpload包括三部分的内容:SWFUpload.js、swfupload.swf、初始化配置参数及各种事件处理函数。所以首先在页面引入SWFUpload.js
其实实现一个文件上传是很简单的,但是要实现一个继承了可配置有水印有缩略图的图片上传功能还是非常繁琐的.
配置参数对象中的常用属性及说明
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| upload_url | String | 处理上传文件的服务器端页面的url地址,可以是绝对地址,也可以是相对地址,当为相对地址时相对的是当前代码所在的文档地址 | |
| preserve_relative_urls | Boolean | false | 如果为false则SWFUpload会把swfupload.swf用到的相对地址转换为绝对地址,以达到更好的兼容性 |
| file_post_name | String | Filedata | 相当于用普通的文件域上传文件时的name属性,服务器端接收页面通过该名称来获取上传的文件 |
| post_params | Object(直接量) | 一个对象直接量,里面的键/值对会随着每一个文件一起上传,文件上传要附加一些信息时很有用 | |
| use_query_string | Boolean | false | 为false时,post_params属性定义的参数会以post方式上传;为true时,则会以get方式上传(即参数会以查询字符串的形式附加到url后面) |
| file_types | String | 该属性指定了允许上传的文件类型,当有多个类型时使用分号隔开,比如:*.jpg;*.png ,允许所有类型时请使用 *.* | |
| file_types_description | String | 指定在文件选取窗口中显示的文件类型描述,起一个提示和说明的作用吧 | |
| file_size_limit | String | 指定要上传的文件的最大体积,可以带单位,合法的单位有:B、KB、MB、GB,如果省略了单位,则默认为KB。该属性为0时,表示不限制文件的大小。 | |
| file_upload_limit | Number | 指定最多能上传多少个文件,当上传成功的文件数量达到了这个最大值后,就不能再上传文件了,也不能往上传队列里添加文件了。把该属性设为0时表示不限制文件的上传数量。 | |
| file_queue_limit | Number | 指定文件上传队列里最多能同时存放多少个文件。当超过了这个数目后只有当队列里有文件上传成功、上传出错或被取消上传后,等同数量的其他文件才可以被添加进来。当file_upload_limit的数值或者剩余的能上传的文件数量小于file_queue_limit时,则取那个更小的值 | |
| flash_url | String | swfupload.swf文件的绝对或相对地址,相对地址是指相对于当前的页面地址。实例化swfupload后,就不能再改变该属性的值了。 | |
| prevent_swf_caching | Boolean | 为true时会加一个随机数在swfupload.swf地址的后面,以阻止flash影片被缓存,这是为了防止某些版本的IE浏览器在读取缓存的falsh影片时出现的bug | |
| button_placeholder_id | String | 指定一个dom元素的id,该dom元素在swfupload实例化后会被Flash按钮代替,这个dom元素相当于一个占位符 | |
| button_placeholder | DOMElement | 指定一个dom元素,该dom元素在swfupload实例化后会被Flash按钮代替,这个dom元素相当于一个占位符。当button_placeholder_id与button_placeholder都存在时,以button_placeholder_id为优先 | |
| button_image_url | String | 指定Flash按钮的背景图片,相对地址或绝对地址都可以。该地址会受到preserve_relative_urls属性的影响,遵从与upload_url一样的规则。 该背景图片必须是一个sprite图片,从上到下包含了Flash按钮的正常、鼠标悬停、按下、禁用这四种状态。因此该图片的高度应该是Flash按钮高度的四倍 |
|
| button_width | Number | 指定Flash按钮的宽度 | |
| button_height | Number | 指定Flash按钮的高度,应该为button_image_url所指定的按钮背景图片高度的1/4 | |
| button_text | String | 指定Flash按钮上的文字,也可以是html代码 | |
| button_text_style | String | Flash按钮上的文字的样式,使用方法见示例 | |
| button_text_top_padding | Number | 指定Flash按钮顶部的内边距,可使用负值 | |
| button_text_left_padding | Number | 指定Flash按钮左边的内边距,可使用负值 | |
| button_disabled | Boolean | false | 为true时Flash按钮将变为禁用状态,点击也不会触发任何行为 |
| button_cursor | 指定鼠标悬停在Flash按钮上时的光标样式,可用值为SWFUpload.CURSOR里定义的常量 | ||
| button_window_mode | 指定Flash按钮的WMODE属性,可用值为SWFUpload.WINDOW_MODE里定义的常量 | ||
| file_dialog_start_handler | Function | fileDialogStart事件侦听函数 | |
| file_queued_handler | Function | fileQueued事件侦听函数 | |
| file_queue_error_handler | Function | fileQueueError事件侦听函数 | |
| file_dialog_complete_handler | Function | fileDialogComplete事件侦听函数 | |
| upload_start_handler | Function | uploadStart事件侦听函数 | |
| upload_progress_handler | Function | uploadProgress事件侦听函数 | |
| upload_error_handler | Function | uploadError事件侦听函数 | |
| upload_success_handler | Function | uploadSuccess事件侦听函数 | |
| upload_complete_handler | Function | uploadComplete事件侦听函数 |
源码说明:
public class siteconfig { public int attachfilesize{ get; set;}//附件文件大小 public int attachimgsize { get; set; }//附件图片大小 public int attachimgmaxheight{ get; set;}//附件图片最大高度 public int attachimgmaxwidth { get; set; }//附件图片最大宽度 public int thumbnailwidth { get; set; }//缩略图宽度 public int thumbnailheight { get; set; }//缩略图宽度 public int watermarktype { get; set; }//水印类型1文件2图片 public string watermarktext { get; set; }//水印文字 public int watermarkimgquality { get; set; }//水印质量 public string watermarkpic { get; set; }//水印图片名称 public string webpath { get; set; }//web目录 public string attachpath { get; set; }//上传文件夹 public int watermarkposition { get;set;}//水印位置 public string watermarkfont { get; set; }//水印字体 public int watermarkfontsize { get; set; }//水印字体大小 public int watermarktransparency { get; set; }//透明度 public int attachsave { get; set; }//保存的类型按年月/日存入不同的文件夹/按年月日每天一个文件夹 public string attachextension { get; set; }//允许的扩展名 }
下载例子源码 VS2012+MVC4
链接:http://pan.baidu.com/s/1c0mskZQ 密码:v0wn
由于最近需要把以前的一个项目写一个文档,但一时又不知道写成怎样的,又恰好发现了可以生成chm的工具,于是乎我就研究了下,感觉还不错,所以也给大家分享下。好了,不多废话,下面就来实现一下吧。
生成前的准备
在开始做之前,还是要补充说明一点:我们是通过C#文档注释生成的XML文件来生成帮助文档的。因此,第一步就是生成XML文档:
具体步骤:打开VS->随意创建一个项目(这里我用的是控制台项目),然后添加如下内容:
/// <summary> /// 人类 /// </summary> public class Person { /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 年龄 /// </summary> public int Age { get; set; } /// <summary> /// 自我介绍 /// </summary> /// <param name="name">姓名</param> /// <param name="age">年龄</param> /// <returns>自我介绍的内容</returns> public string Say(string name,string age ) { return "My name is" + name + ",Age:" + age; } }
很普通的一个类,但是要注意下注释部分,这里的注释是文档(不同于”//”的注释,在VS中敲“///”就是文档注释)
PS:注意,我这里Person类的访问修饰符是public,由于我这里只用了一个类,如果不加public就会出现“No APIs found to document. See error topic in help file for details.”的错误。
继续之前的操作:右击程序集选择属性,选中XML文档文件:
保存,编译,然后在项目的bin\Debug目录下你就会看到生成的xml文件:
生成chm文档工具介绍
Sandcastle是微软官方的文档生成工具,NDoc开发停止后,这个貌似也是唯一的一个这方面的工具。它从dll文件及其xml注释文件能够生成完整的帮助文档,支持多种生成格式(Helpe1x:chm, Helper2x:Hxs, Website,HelperView),结合新发布的Sandcastle Help File Builder可视化工具,整个生成过程十分简单,而且SHFB工具看起来很强大,不仅能够直接配置生成文档的各个属性,而且还支持很灵活的扩展设置,为我们提供完美的.NET类库文档成为一个可能。
从这里下载工具:
Sandcastle:http://sandcastle.codeplex.com/,点击右侧的download大家都懂的。
Sandcastle Help File Builder:http://shfb.codeplex.com/
在SHFB的压缩包里我发现了一个VS插件,因此接下来我就打算用VS来演示,如果不想装这个插件的话,可以运行C:\Program Files (x86)\EWSoftware\Sandcastle Help File Builder\SandcastleBuilderGUI.exe这个程序,结果都是一样的
生成chm文档
重头戏来了,打开VS,新建项目:
点确定,右侧项目结构:
选择ContentLayout.content,看左边,这里有一些文档属性以及版本号等信息,但是我们这里用不到,因此删掉。如果留着也没事,就是在生成文档的时候头部多了几行而已,有兴趣的朋友可以继续研究。
选择要生成文档的程序集(对应的XML会自动添加),
右击项目选择属性:
到这里为止可谓是万事俱备,只欠东风。那么,东风在哪里呢?很简单,生成项目。如果在生成的过程中没有错误的话,那么在项目目录的Help文件夹下你就会看到:
打开测试文档:
总结
貌似没什么好总结的。。。。
参考资料:http://www.cnblogs.com/lonely7345/archive/2010/01/13/1647245.html