1、上传文件
1.1、struts2上传文件:
<!-- 上传文件需要配置如下两个常量,10M上限,临时目录/tmp ,windows下我用的时候出现在d:\\tmp目录下-->
<constant name="struts.multipart.maxSize" value="10701096" />
<constant name="struts.multipart.saveDir" value="/tmp" />
页面:<input id="files" name="file" type="file" value="浏览" />
Action: private File file;
上传上去后,从临时目录中(如upload_baf5be8a_fab9_4f76_be4f_464876b5311d_00000005.tmp)读byte[],写成目标后缀的文件。 或者FileUtils.copyFile(file, destFile);
通过flash上传
http://www.uploadify.com/demos/ java端还得从临时文件复制到目的文件。
html:
<script type="text/javascript" src="assets/js/jquery.js"></script>
<script src="js/uploadify/jquery.uploadify.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="js/uploadify/uploadify.css">
<input id="file_upload" type="file"/>
js:
<script>
$(function() {
$("#file_upload").uploadify({
//浏览按钮显示文字
'buttonText' : '选择文件',
//flash
swf : 'js/uploadify/uploadify.swf',
//上传处理程序
uploader : 'upload.do?tokenCode=$!tokenCode',
//服务器端脚本使用的文件对象的名称。java:private File file
'fileObjName' : 'file',
//上传文件的大小限制 ,如:1024kb ,1mb
'fileSizeLimit' : '1mb',
//允许上传的文件后缀
'fileTypeExts' : '*.jpg;*.jpeg;*.png',
//开启调试
'debug' : true,
//是否自动上传,默认为true
'auto':true,
//超时时间
'successTimeout':99999,
//是否可以选择多个文件上传
'multi' : false,
//浏览按钮的宽度
width : 60,
//浏览按钮的高度
height : 30,
//一次可选择队列数量
'queueSizeLimit' : 2,
//上传总数量
'uploadLimit':3,
//传到后台的参数
'formData' : {'type' : '2','userid':'111'},
//返回一个错误,选择文件的时候触发
'onSelectError':function(file, errorCode, errorMsg){
switch(errorCode) {
//当'multi' : true,一次选择超过queueSizeLimit 或者 多次上传总共超过uploadLimit时触发
case -100:
this.queueData.errorMsg="上传的文件数量已经超出系统限制的"+$('#file_upload').uploadify('settings','queueSizeLimit')+"个文件!";
break;
case -110:
this.queueData.errorMsg="文件 ["+file.name+"] 大小超出系统限制的"+$('#file_upload').uploadify('settings','fileSizeLimit')+"大小!"
break;
case -120:
this.queueData.errorMsg="文件 ["+file.name+"] 大小异常!";
break;
case -130:
this.queueData.errorMsg="文件 ["+file.name+"] 类型不正确!";
break;
}
},
//检测FLASH失败调用
'onFallback':function(){
alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。");
},
//上传到服务器,服务器返回相应信息到data里
'onUploadSuccess' : function(file, data, response){
data=eval("("+data+")");
$("#modelPic").val(data.url);
}
});
});
</script>
Action:
//属性都有set get方法
private File file;//上传文件 'fileObjName' : 'file'
private String fileFileName;//上传文件的文件名,名字以file开头+FileName
private String type; //'formData' : {'type' : '$!type','userid':'30'},
private String url;
@Action(value = "upload", results = { @Result(name = "success", type = "json") })
public String upload() {
url ="img/"+createDestName(fileFileName);
File destFile = new File(Constants.RESOURCE_UPLOADFILE_PATH + url);
try {
FileUtils.copyFile(file, destFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 根据aa.jpg 创建 /yyyy/MM/dd/id.jpg
* @param orginame
* @return
*/
public String createDestName(String orginame){
String destName="";
destName=new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
destName+=UUID.randomUUID().toString().replaceAll("-", "");
destName+=orginame.substring(orginame.lastIndexOf("."));
return destName;
}
可以参考
Uploadify3.1与Uploadify2.1.4属性详细说明 :http://blog.csdn.net/lisa890608/article/details/17608321
2、存储文件
2.1、存储到一个目录下
2.2、分布式存储到fastdfs中。