近期给公司做了一个小项目,其中一个页面要求要上传8到10个附件,也就是说一个页面要有至少8个文件上传控件(不能使用多文件上传控件因为其中一部分附件要求用户上传文件的同时还要填写上传的为何种附件)。
初步做法为:写多个input[file]控件放到form提交,发现在nginx环境下会超出最大限制,会报413 entity too large错误;
之后考虑针对单个文件上传采用异步方式,这样就可以化解一次性提交多个文件的问题,我们采用了jQuery的ajaxfileupload插件;但是,接着,为了增强用户体验需要上传成功后将上传后的地址回填至file控件,这样该方案又不适合了,因为浏览器拒绝js中修改file控件的值。
最终,采用了流行的swfupload这种flash控件来解决问题。
这期间发现一些file的浏览器操作即兼容性问题:
1.js不能控制input[file]控件的值,只能是点击“浏览”才可以
2.input[file]控件的值在各个浏览器下可以获取,但是firefox下获取的是文件的名字不包含路径,而ie下则获取到的是该文件在用户机器上的完整路径如:c:\1.jpg
3.在ie下,若是用js触发file控件来实现浏览(如将input[file]的display设置为none,用input[text]来作为替代方案),则在提交时ie会提示“拒绝访问错误”。
因为ie要求file控件必须是点击“浏览”来上传文件;解决方法为:将file控件放在div并设置样式为透明,覆盖在text之上,这样用户看到的是text控件,操作的确实file控件。
4.firefox下虽然头部已设置了no-cache,但是连续多次上传时,从第二次开始一直获取到的是首次上传的文件(如第一次上传文件过大,第二次换个小文件依然如此,调试发现获取的仍是第一次上传的文件)。
j解决办法为:每次将file控件对象传给js方法,而不是通过document.getElementById或者document.getElementsByName(如upload(this))
5.对于
var newFileObj = $(file控件对象).clone();
在firefox下得到的newFileObj通过newFileObj.val()可以看到能获取到值;而在ie下newFileObj的值为空,用clone(true)方法在ie下仍然为空
分享到:
相关推荐
在C#中,创建这样的备忘小工具首先需要掌握的基础是Windows Forms或WPF框架,这是.NET Framework用于构建桌面应用的主要方式。Windows Forms提供了一套丰富的控件库,如TextBox用于输入文字,DateTimePicker用于选择...
在本项目中,我们关注的是一个使用C#编程语言实现的综合日历、备忘录和闹钟功能的小程序。这个程序为用户提供了方便的方式来管理他们的日常任务和提醒,是个人时间管理和组织的理想工具。接下来,我们将深入探讨C#...
总结,Windows CE备忘录应用程序结合了C#的强大编程能力和Windows CE的嵌入式特性,为开发者提供了一个实际的项目案例。深入研究和实践这些源码,不仅能够提升开发者在Windows CE平台上的编程技能,还能为未来的...
以下是关于VB工作备忘录设计与实现的一些核心知识点: 1. **Visual Basic 简介**:VB是微软公司推出的一种面向对象的事件驱动编程语言,是Visual Studio的一部分,因其语法简洁、易学易用而广泛应用于教学和小型...
### GUI备忘录:图像处理中的MATLAB应用 #### 前言 MATLAB作为一款强大的数值计算软件,广泛应用于科学计算、算法开发以及数据分析等领域。对于从事图像处理的研究者和工程师来说,MATLAB不仅提供了丰富的图像处理...
5. **文件操作**:为了持久化存储数据,开发者可能使用VB的文件I/O功能,如FileOpen、WriteLine、ReadLine等,将备忘录信息写入和读取文件。 6. **错误处理**:通过Try-Catch语句进行异常处理,确保程序在遇到错误...
本人的安装经过,既是自己备忘,也可以给他人参考。不同的硬件和操作系统可能需要做适当的调整。 1. 解压拷贝AlphaControls_14.24 Source到c盘。 2. 打开sDefs.inc文件,注释掉//{$DEFINE ADDWEBBROWSER},否则...
在IT行业中,备忘录应用程序是一种常见的工具,用于记录和管理日常任务、想法和提醒。本指南将深入探讨如何使用Python语言来开发一个功能齐全的备忘录应用。Python因其简洁的语法和丰富的库支持,成为非常适合快速...
11. **JPanel和JTextField**:Java Swing库中的`JPanel`用于创建自定义的GUI组件区域,而`JTextField`则是用于用户输入文本的控件。 12. **Hashtable和HashMap**:在Java中,`Hashtable`(Java 7及更早版本)和`...
String mSavedPath = Environment.getExternalStorageDirectory()+File.separator + "screenshot.png" ; try { Runtime.getRuntime().exec("screencap -p " + mSavedPath); } catch (Exception e) { e....
> 若想取得版本信息 Response.Write FileObj.Copyright方法FileName(元素名) 取得该元素的文件名FileSize(元素名) 取得该元素的文件大小SaveFile(元素名) 保存该元素的文件Request(元素名) 取得该元素名的值返回参数...