在Asp.net Mvc 3中使用swfupload
一、无法在iis下显示上传按钮的问题
注意在js中,路径要绝对按照下面的方式书写:
flash_url: '@Url.Content("~/Common/SwfUpload/swfupload.swf")',
button_image_url: '@Url.Content("~/Common/SwfUpload/TestImageNoText_65x29.png")',
如果写成
button_image_url: '/Common/SwfUpload/TestImageNoText_65x29.png")',
则在iisexpress中调试能够通过,但在iis中运行的时候会出现错误,原因是前者会将虚拟路径加上,后者不会。
最终造成的问题是:1、上传按钮不会显示;2、当然也无法点击打开文件对话框,因为swf文件也无法载入。
二、上传路径的写法:
假设我们使用UploadController的Upload方法,来处理上传,那么:
1、参数要一致,当然,我们可以不要设置参数,只用Request.Files来获得传来的文件
2、路径和flash_url一致,也用url.Content,当然也可用Url.Action
三、后台代码的书写:
对于1个文件,对于多个文件
四、文件大小限制
五、file和swfupload的区别:
原理上说,swfupload在本地读取文件,我们通过js能够获取本地的进度。因此,开始传了多少,在尚未到达服务器的时候我们就知道。
file控件则是整个文件传递到服务器后我们才能知道进度,当然,有一些特别的服务端的方法,可以解析请求内容,得到“到达的数量”
因此,swfupload通过js轮询本地的进度。
当然,如果服务端处理耗时较长的话,也可以由本地js,轮询服务端某个进度值。
所以,可以统一进度条的样式,服务端处理通常包括:1、将到达的请求(已经包含整个文件)保存到磁盘上;2、如果是导入操作,再将其加入数据库。
这是对excel之类的情形,如果以某种文件形式上传导入到数据库,则无需保存文件的操作,仅针对stream处理即可。
六、考虑客户端禁用java或未安装Flash的问题
七、封装上传功能:
实际上,对于单文件上传,理想的方法是提供一个按钮,选择文件后,在按钮后方或者下方,出现文件名,正在上传和一个进度条。当然,能够显示上传耗时、剩余多少时间、上传速度最好。
上传结束后,保持这些信息,同时显示“上传成功”,下次选择文件的时候,重复此动作。
如果客户端禁用js,则改用file控件,不显示进度---此时也无法通过js做什么。
如果客户端可用js,但未安装flash,这时可以用一个滚动的gif图形,粗略的表示上传正在进行。
对于多文件,方式差不多。大体上,swfupload官网的Demo包括file队列、速度等js文件,改改就能用。
对于Asp.net mvc,实际上可以有两种封装方法:
1、封装为htmlhelper
2、全局提供唯一的一个上传Action,各处调用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架