呵呵,大家好,第一次总结经验,以前都不怎么总结,但想想人生必须要进行总结。主要是使用form与Struts2完成的一个图片上传功能。直接上代码:
这是Action的Class里的方法
public String Image(){
boolean flag=true;
//获取文件路径。
String path = ServletActionContext.getRequest().getRealPath("/")+"\\WEB-Image\\product_color_temp";
try {
if(updateImageInput.length()<=0){
message="没有找到上传的文件。";
return ERROR;
}
File f = this.getUpdateImageInput();
if(this.getUpdateImageInputFileName().endsWith(".exe")){
message="对不起,你上传的文件格式不允许!!!";
return ERROR;
}
FileInputStream inputStream = new FileInputStream(f);
//写入文件的地址我这里是直接把文件路径与文件名给拼出来了。
FileOutputStream outputStream = new FileOutputStream(new File(path + "/"+ ImageName+"."+this.returnFileName(updateImageInputFileName)));
//这里原先写的是1024,但我不明白是什么意思,我就修改成了2048,我的想法是可以大一倍。如果理解错误,大神别责怪呀。
byte[] buf = new byte[2048];
int length = 0;
//开始写入。
while ((length = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, length);
}
inputStream.close();
outputStream.flush();
outputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
//e.printStackTrace();
flag=false;
message="后台报错。请联系管理员!!!";
return ERROR;
}
//这里我经过一个FLAG进行判断然后转入页面。
if(flag){
imagepath="true=WEB-Image=product_color_temp="+ ImageName+"."+this.returnFileName(updateImageInputFileName);
return SUCCESS;
}else{
message="对不起,上传的文件失败!!!";
return ERROR;
}
}
//在这里再说一下,这里只是一个方法,前面要定义以下:
private File updateImageInput;
private String ImageName;
private String updateImageInputFileName;
private String updateImageInputContentType;
private String message;
private String imagepath;
//我是直接拷的,所以也就不多说了,有三样是必须要的,是1、3、4;其它的是我自己定义的。
下面是Struts2的配置:
<struts>
<!-- 上传过程中临时文件存放目录 这个好没有什么用,我就直接放这里了 -->
<constant name="struts.multipart.saveDir" value="WEB-Image/product_color_temp"></constant>
<!-- 可以上传10M以内大小 -->
<constant name="struts.multipart.maxSize" value="10485760"/>
<package name="upload" namespace="/" extends="json-default">
<action name="upload_*" class="com.dream.aco.action.upload.uploadImage" method="{1}">
<result name="error" type="json">
<param name="root">message</param>
</result>
<result name="success" type="json">
<param name="root">imagepath</param>
</result>
</action>
</package>
</struts>
//Struts这个比软件简单,所以这里不要我在多说了。
//前台页面代码:
<form id="form1" action="upload_Image" encType="multipart/form-data" method="post" target="hidden_frame">
<input type="hidden" id="ImageName" name="ImageName">
<input type="file" id="updateImageInput" name="updateImageInput" accept="image/*" οnchange="updateImage(this.value)">
<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</form>
</div>
<font color="red">最大上传10M,大了会报错,后面完善</font><button οnclick="updateImageButton()" >上传图片</button>
</div>
//这里说一下我是实现无刷新上传,并且还在前台显示,如果有需要到时候再单独联系我吧。最后给看一下方法。(在线显示的就不给看了,一般可以自己写出来。)
var count =0;
function updateImageButton(){
if(count==4){
alert("最多上传四张图片!");
return;
}
//这里给图片进行按上传时间重名字有个地方要个性就是这个名称,因为我这里面还有一个其它元素,但在这里我就没有写进去,所以这个名称这里各位要注意一下。
var str1=new Date();
var str=str1.getFullYear().toString()+(str1.getMonth()+1).toString()+str1.getDate().toString()+str1.getHours().toString()+str1.getMinutes().toString()+str1.getSeconds().toString();
var picName=productCode+productColorCode+str;
$("#ImageName").val(picName);
$("#updateImageInput").click();
}
这就是上传的方法了。
function updateImage(files) {
$('#form1').submit();
}
上传之后是一位大神给我讲使用iframe里的onload这个去处理,所以我也在这里给各位提示一下。