二期项目总结(一) 通过a标签打开文件上传选择框,使用Ajax上传文件

很多时候我们会给a标签增加一个点击事件,用于上传文件。为什么不使用原滋原味的文本打开按钮呢?当然是不好看,而且样式难以控制。

这时候可以通过控制a标签,给它添加一个点击事件,在a标签触发点击事件的时候打开文本选择框,就很好看了。

好了,现在来上思路:

先要给出一个a标签和文本选择的打开input,但是这个input的display要设置为none, 如下:

<a id="uoloadA" onclick="ClickInput()">上传文件</a>
    <input type="file" style="display:none" id="InputUpload" onchange="changeInput()"/>

a标签有一个点击方法,点击时触发这个方法,这个方法里面用于打开文本选择器,如下:

    function ClickInput(){
        //动态给文件打开框触发点击事件
        document.getElementById("InputUpload").click();
    }

这样,一点击a标签就会打开文本选择框,

input里面有一个onchange的方法,用于监控文本选择器的状态,如果文本选择器选择了一个文件,就会触发这个方法。那么这个方法里面写的就是ajaxFileUpload的请求代码了

如下:

//当文件选择框改变时,就上传文件,里面发Ajax请求到处理层
    function changeInput(){
        $.ajaxFileUpload({
            fileElementId:‘InputUpload‘,  //要上传的文件的id
            url:‘Upload.jsp‘,  //请求的地址,
            type:‘post‘,        //请求的方式
            dataType:‘text‘,    //返回数据时的格式,也可以将Text改为json,这个要看具体需求
             secureuri: false,  //是否需要安全协议,一般设置为false

             async : true,      //是否是异步

             success: function(data) {   //提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
                 if($.trim(data) != null){
                    alert("上传成功!");
                 }
             },
             error: function(data, status, e) {  //提交失败自动执行的处理函数。
                alert("上传失败!");
             }
        });
    }

这样就可以上传一个文件到处理层,在处理层里面通过smartUpload来处理,就可以成功的上传一个文件了。

1、url            上传处理程序地址。  
2,fileElementId       需要上传的文件域的ID,即<input type="file">的ID。
3,secureuri        是否启用安全提交,默认为false。 
4,dataType        服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
5,success        提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
6,error          提交失败自动执行的处理函数。
7,data           自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。
8, type            当要提交自定义参数时,这个参数要设置成post

错误提示:

1,SyntaxError: missing ; before statement错误
  如果出现这个错误就需要检查url路径是否可以访问
2,SyntaxError: syntax error错误
  如果出现这个错误就需要检查处理提交操作的服务器后台处理程序是否存在语法错误
3,SyntaxError: invalid property id错误
  如果出现这个错误就需要检查文本域属性ID是否存在
4,SyntaxError: missing } in XML expression错误
  如果出现这个错误就需要检查文件name是否一致或不存在
5,其它自定义错误
  大家可使用变量$error直接打印的方法检查各参数是否正确,比起上面这些无效的错误提示还是方便很多。

接下来写一下smartUpload的处理

我这个写成了一个方法,但具体的内容差不多,

public String getMusicPath(PageContext pageContext){
        SmartUpload su = new SmartUpload();
        String filedName = "";
        try {

            su.initialize(pageContext);//初始化smartUpload

            su.setMaxFileSize(1024 *1024*30);  //设置传送文件的大小

            su.setCharset("utf-8");  //设置编码集

       su.setAllowedFilesList("mp3,mp4");  //设置要上传的后缀,以数组的方式提交,中间用逗号隔开,当然也可以只写一个后缀

            su.upload();//上传

            String basicPath = pageContext.getRequest().getRealPath("/") + "..\\" + "lrcInfo" + "\\";  //这个是上传之后的文件要存放的路径        //pageContext.getRequest().getRealPath("/")是获取当前项目的绝对路径        
            Files files = su.getFiles();  

            Collection<File> fls = files.getCollection();

            for(File fl : fls){

                if(!fl.isMissing()){  //如果文件存在

                    filedName = fl.getFileName();

                    fl.saveAs(basicPath + filedName);  //以这样的绝对路径存放

                }

            }

        } catch (ServletException e) {

            e.printStackTrace();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        } catch (SmartUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return filedName; //这里是因为自己的业务需求返回的文件名

    }

原文地址:https://www.cnblogs.com/1998xujinren/p/10923842.html

时间: 2024-08-29 10:29:47

二期项目总结(一) 通过a标签打开文件上传选择框,使用Ajax上传文件的相关文章

使用低版本的VS打开高版本项目的解决方案(以VS2008打开VS2010开发的项目为例)

使用低版本的VS打开高版本项目的解决方案,这里以VS2008打开VS2010开发的项目为例. 右键项目的sln文件以记事本的方式打开: 将对应的前两列版本各降到对应的版本,这边的11.00改为10.00,2010改为2008: 然后使用2008版本打开该sln文件,重新生成项目就OK了. 若是vs2013在vs2010中打开,可以参考此篇文章:如何将VS2013的项目在VS2010中打开(Visual Studio降级打开项目) 本文来自木庄博客>使用低版本的VS打开高版本项目的解决方案(以VS

关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件

找了这么久资料,总算解决了 感谢博客园:http://www.cnblogs.com/xsht/p/5275081.html 感谢百度:http://zhidao.baidu.com/link?url=Vz4TlygvnMyYVj105bCuzkusjF0G5rM6opHvEzhcCaJK5s1gFUZ3PBgAWCNsfY1RmtPf4ZEo8EV_Gd7SYKV4S_ 在有Struts部署的Java EE环境中,我们一般把jsp页面写在WebRoot\WEB-INF\content 目录下,

Visual Studio 打开解决方案后 弹出框显示 &quot;正在打开文件...&quot; 迟迟没反应 的解决方法

Visual Studio 打开解决方案后 弹出框显示 "正在打开文件...",任务管理器的devenv进程又很正常,不会显示"未响应". 而IDE的左下角有个 "正在等待分析完成..." 提示. 刚开始,我以为是VS插件问题,因为我刚安装了一个插件后,重启VS,打开解决方案就出现这个问题了,所以我以为是VS插件问题. 后来我把VS插件通通卸载了,把/ResetAddin /ResetSkipPkgs /ResetSettings 之类的deve

框架 day39-42 SSH整合练习项目CRM(配置文件,增删改查,ajax,上传/下载,分页,BaseDao/Action)

1     配置文件 1.1   spring配置 1.1.1       介绍     加载properties     配置数据源DataSource     配置SessionFactory , 加载所有hbm.xml     hibernate事务管理     使用 <import > 所有的模块都使用单独配置文件 1.1.2       使用源码包     使用config源码,将源码和配置文件分开存放,方便程序的维护. 1.1.3       spring核心 1.1.

UI标签库专题四 JEECG智能开发平台 Upload 上传标签

1. Upload(上传标签) 1.1.  参数 属性名 类型 描述 是否必须 默认值 id string 上传控件唯一标示 是 null name string 控件name 是 null formData string 上传文件提交后台的其他表单参数取ID 否 null uploader string 上传提交路径 是 null extend string 上传文件扩展名(可选类型组1,pic[*.jpg;*,jpeg;*.png;*.gif;*.bmp;*.ico;*.tif],2,off

升级CUDA版本导致VS2010错误:未找到导入的项目XXX,请确认&lt;Import&gt;声明中的路径正确,且磁盘上存在该文件。。。。

VS2010错误:未找到导入的项目XXX,请确认<Import>声明中的路径正确,且磁盘上存在该文件. E:\IGSNRR\dev\PhDThesisCode_CUDA\gtcg\gtcg.vcxproj : error : 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.5.props”.请确认 <Import> 声明中的路径正确,且磁盘上存在该文件. E:

UAC相关问题分析--使用管理员权限打开VisualStudio,无法访问网络磁盘,无法拖拽文件

搬运自http://wurang.me/2014/06/17/uac-problems.html [问题产生] 问题最初是在administrator权限下,visual studio 打开网络磁盘下的文件报错.经过几次调试,最终发现是问题是在管理员权限下,vs无法访问网络磁盘. Console.Write( System.IO.File.Exists(path)); 该结果返回False.为了确认是由于权限问题引起,使用非管理员权限打开vs,运行上面的程序,结果返回True. 至此问题确立:w

vmware打开虚拟级断电情况下,无法找到虚拟机文件

1.此时会在建立的虚拟机目录下,有一些 %虚拟机名字%.vmx.lck 或者别的   %虚拟机名字%.***.lck   删除这些文件夹 2.虚拟文件 是一个后缀名为vmx的文件,发现断电后 变成了vmx~.直接更名为vmx  然后用虚拟机打开即可 3.忠告:既然是虚拟机,除非你删了虚拟系统的很多东西无法恢复,否则不需要重新安装的. 多动手查查就好 vmware打开虚拟级断电情况下,无法找到虚拟机文件

安卓打开文件浏览器,选择文件后得到返回路径

新手,写的不对还望指正! 在安卓应用开发中经常会遇到需要打开系统文件管理器选择文件后返回路径的操作.例如点击一个导入的Button按钮,首先在根目录下寻找所需要的文件,若文件不存在就弹出对话框是否选择文件,选择文件后返回文件路径,给Button注册监听: public void onClick(View arg0) { if (mFilePath.equals("没有找到相关文件")) { AlertDialog.Builder builder = new AlertDialog.Bu