您的位置:首页 > 编程语言 > Java开发

Struts2SH整合uploadify实现文件上传《按钮中文解决》

2011-10-18 17:56 288 查看
1、官方下载jquery.uploadify解压后放到项目目录下,如下目录进行页面加载

<link  href="/xgrptwo/inspect/uploadify/uploadify.css"  rel="stylesheet" type="text/css"/>

<script type="text/javascript" src="/xgrptwo/inspect/uploadify/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/xgrptwo/inspect/uploadify/swfobject.js"></script>
<script type="text/javascript" src="/xgrptwo/inspect/uploadify/jquery.uploadify.v2.1.4.min.js"></script>


注意路径问题,全部使用的是绝对路径哦,不然可以因为action跳转之类的问题,js没有加载

<script type="text/javascript"><!--

$(document).ready(function(){

$("#uploadTest").uploadify({
'uploader'       : '/xgrptwo/inspect/uploadify/uploadify.swf',
'script'         : '/inspect/attChenMentInfoAction!add.action',
'method'         : 'post',
'cancelImg'      : '/xgrptwo/inspect/uploadify/cancel.png',
'fileDataName'   : 'myFile',
'queueID'        : 'fileQueue',
'folder'         : '/temp',
'auto'           : true,
'multi'          : false,
'width'          : 50,
'height'         : 30,
'buttonImg'      : '/xgrptwo/inspect/uploadify/up.png',
'wmode'          : 'transparent',
'simUploadLimit' : 2,
'sizeLimit'      : 1024000,//文件大小控制,单位是byte
'queueSizeLimit' : 999,
'fileDesc'       : 'rar文件或zip文件doc文件',
'fileExt'        : '*.rar;*.zip;*.doc',
onSelect         :function(e,queueID,fileObj){
//取到filename的值设置给input框
var filename = $("#name").attr("value");
if(filename==""){
$("#name").attr("value",fileObj.name);
//输入框只读
//$("#filename").attr("disabled","disabled");
}
},
onCancel          :function(event,queueID,fileObj,data){

//$("input[name='"+fileObj.name+"']").remove();
//没有文件选中状态,清空filename输入框的值
if(data.fileCount==0){
//输入框内容清空
$("#name").removeAttr("value");
}
},
onComplete        :function(event,queueID,fileObj,data){
//将按钮可用
$("#tijiao").removeAttr("disabled");
},
onInit            :function(){

//初始化一些东西、没有选中文件并且提交的情况下按钮不可用
$("#tijiao").attr({"disabled":"disabled"});
}
});
});
// -->
</script>


上面是页面写的js脚本进行调用和一些初始化,里面的参数网上有很多详解

<div id="fileQueue"></div>
<input type="file" name="myFile" id="uploadTest" >
<a class="link4" href="javascript:$('#uploadTest').uploadifyUpload()">点击提交</a>
<a class="link4" href="javascript:$('#uploadTest').uploadifyClearQueue()">取消上传</a>


这段用户上传文件的input框和进度条显示区域以及一些按钮操作连接,当然这些连接其实是可以不要的。。。,只要你看懂了前面,以上是最基础的,也是必须的哦

'auto' : true,
'multi' : false,

2,可能大家上传之后会遇到中文问题,这个的原因可能是jsp页面使用的编码和struts2设置的编号以及uploadify所使用的编码不一致导致的,uploadify发送使用的编码是"UTF-8",都使用这个就没事了

3、笔者这里因项目使用的统一编码是GBK,所有出现了乱码,尚没有解决,这里我使用了一个方法解决,可供参考

<form id="uploadfrom" action="/inspect/attChenMentInfoAction!copyFileToDisk.action" method="post"  name="uploadfrom">
<table align="center" border="1" width="90%" style="border-collapse: collapse;margin-top:5px;display:block" bordercolor="#D7D7D7" cellpadding="0" cellspacing="0" id="lishijilu">
<tr class="tab_title_bg">
<td>资料名称</td><td><input id="name" name="name" type="text" size="50"></input><font color="#ff0000"><span>*</span></font></td>
<td>资料说明</td><td><input id="filecaption" name="filecaption" type="text" size="50"></input><font color="#ff0000"><span>*</span></font></td>
</tr>
<tr>
<td> </td><td colspan="3">
<input id="tijiao" name="tijiao" type="submit" value="提交" onclick="return checkForm();"></input>
</td>
</tr>
</table>
</form>


看懂了吗,即每次上传之后,我把上传的文件名设置进我的一个input框,那么用户可以自己去设置这个文件一些其他信息了,非常类似163邮箱的上传功能哦。

其实就是俩次提交,第一次提交只是将文件从客户端到服务器,同时保存到服务器某个目录下,第二次form提交就是到这个目录下去找文件,同时保存到正式目录并且记录到数据库

4、最后来看struts2的action了

public String add()
{
System.out.println(fileName+"---->>>");
String newFileName = new Date().getTime() + getExtention(fileName);

File newFile = new File(ServletActionContext.getServletContext()
.getRealPath("/upload")+"/"+fileName);
// + "/" + newFileName);
System.out.println("copy文件");
upload(myFile, newFile);
try {
ServletActionContext.getResponse().getWriter().write(0);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "success";
}

private static void upload(File src, File dst) {
try {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src),
BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
while (in.read(buffer) > 0)
{
out.write(buffer);
}
}
finally
{
if (null != in)
{
in.close();
}
if (null != out)
{
out.close();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf(".");

return fileName.substring(pos);
}


5、这样就将文件保存到服务器/upload目录下了,当然实际项目中可以同时要向数据库写数据拉,以上供参考

6 、上传选择文件中文问题,据说是这个唯一的缺点, 解决方案是

  'width' : 50,
'height' : 30,
'buttonImg' : '/xgrptwo/inspect/uploadify/up.png',
'wmode' : 'transparent',

分别是选择文件那个按钮的宽度、高度、对应的图片。。。。那么你可以自己选择图片,那么图片上就可以有中文了。

7、因实际项目隐私问题,所有部分代码没有提供,有需求的可留言,我会一一回复的,写得不好的地方请谅解,小菜鸟的小笔记本而已。。。。。

下一章:struts2实现文件下载和使用struts2的pg标签进行数据分页
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐