问题:post方式下,设置formData在后台取不到参数
Uploadify与jFinal都使用了最新版本
在使用Uploadify时,我尝试通过设置formData参数向后台传递一个存储上传文件的文件夹名称
代码如下:
$(function() { $('#file_upload').uploadify({ 'swf' : '/js/Uploadify/uploadify.swf', 'uploader' : '/system/file/image', 'buttonText' : "选择图片", 'method' : "post", //指定文件上传时上传控件的提交方法,post 或者get 'multi' : 'false', //指定在选择上传文件时,是否允许同时选中多个,true(可以选中多个,默认值),false(只能选中一个) //指定是否允许文件加入上传队列后自动开始上传, true(允许自动上传,默认值),false(关闭自动上传) 'auto' : true, //指定检查文件是否已经存在的action,action返回值:1(存在),0(不存在) // 'checkExisting': '/system/file/checkexists', //指定文件上传大小的限制,可以传入数字与字符串,传入数字时,默认单位是kb,传入字符串时,要求值与单位一起传入(B, KB, MB, or GB) //若无限制,可指定为0(默认值) 'fileSizeLimit' : 0, //指定在服务端用于获取该上传文件对象的名称,在php中可用$_FILES['the_files'] 'fileObjName' : 'upfile', //指定在弹出选择文件的对话框时,在可选文件类型下拉框中的选定值,默认:“All Files” ,需与fileTypeExts联合使用 'fileTypeDesc' : 'All Files', //允许上传的文件扩展名列表,多个扩展名用分号分隔,这是不安全的,客户端手动更改文件扩展名,即可绕过验证,服务端仍需验证 'fileTypeExts' : '*.gif; *.jpg; *.png', //在初始化时指定上传时,传递到服务端的参数,这里指定的参数每次上传都会传入, // 若要动态指定传入参数,可以使用setting方法在onUploadStart事件中指定 //服务端根据客户端采用get还是post请求方式,来使用相应方法获取数据 'formData': {"folder": "images"} }); });
在后台的action中尝试 使用getPara("folder")来获取参数“folder”,获取不到。
网上有人说,先使用getFile获取文件然后,就能获取到参数了,一试,果然可行。
但是有的时候需要先获取folder参数,我们可以使用get方式提交,这个时候,其实是把参数作为queryString拼接到请求的url后面,也就是使用了url传参方式。
另外发现,如果在url后面传递一个其他的url参数,仍然使用post提交,则后台能正常获取数据。
综合来说,这应该是jfinal在处理传参时的一个小bug,而且html5有FormData API,不知道jFinal是否能正常取值?
希望未来的JFinal能考虑修复吧。