form与Struts2实现图片上传功能

呵呵,大家好,第一次总结经验,以前都不怎么总结,但想想人生必须要进行总结。主要是使用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这个去处理,所以我也在这里给各位提示一下。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值