Struts2自带的上传方法(简单实用)案例图片上传,文件也可,

     其实图片上传有好多种方法,一般不建议文件或者文件转码放到数据库中 ,因为太大 还会失真,簡単的就是传到到服务器的自定义的目录下面。

废话少说  简单说下流程,1.jsp(浏览图片名称)---2.XML(过滤限制文件大小,格式等)---3.java(转成流 并读写到指定目录)---4.jsp(浏览图片),我就简单分成4块。

(整个项目的完整代码的下载地址在最下面,但我觉得还是好好看看自己实践的好 注:案例的框架是 Struts2+MyBatis+Sping框架是我CSDN下的,下载后直接访问userAdd.jsp)

(1).JSP上传

         用的是struts的S标签 所以别忘了在JSP上开头加上  <%@ taglib prefix="s"  uri="/struts-tags"%>     还有就是  enctype="multipart/form-data" 是编码格式的意思 这里し上传二进制数据的意思,上传的话必须加上 不加的话 JSP是默认编码格式是application/x-www-form-urlencoded。

<s:form action="addUser" namespace="/user" method="post" enctype="multipart/form-data">
    		<div style="font-size:14px">
    		图片上传   
    			<input type="file" name="file" value="选择"/> 		
    			<input type="submit"  value="确定"/>
    		</div>
</s:form>

2.XML(过滤限制文件大小,格式等)

    struts 的6个jar包中有一个commons-fileupload-1.2.2.jar ,struts的上传下载作用。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
     <!-- 指定国际化资源文件的baseName为messageResource -->
     <constant name="struts.custom.i18n.resources" value="messageResource"/> 
     <!-- 设置该应用使用的解码集 -->
     <constant name="struts.i18n.encoding" value="utf-8"/>
     <!-- 上传的全部图片的最大限制-->
     <constant name="struts.multipart.maxSize" value="1024102400"/>   
	<constant name="struts.configuration.xmlreload" value="true"/>
			<!-- 当struts配置文件修改时是否自动加载 -->
	<constant name="struts.devMode" value="true"/>
			<!-- 开发模式下打印详细的错误信息 -->
	<constant name="struts.ui.theme" value="xhtml"/>
	<package name="user" namespace="/user" extends="struts-default">
		<action name="listUser" class="userAction" method="queryAllUser">
			<result name="success">/userAdd.jsp</result>     	
		</action>
		<action name="addUser" class="userAction" method="add">
		    <interceptor-ref name="fileUpload">
                <param name="allowedTypes">
                    image/bmp,image/png,image/gif,image/jpeg,image/jpg 
                </param>
                <param name="maximumSize">502400</param>
                    </interceptor-ref>           
                    <!-- 默认的拦截器,必须要写 -->
                  <interceptor-ref name="defaultStack" />   
                  <result name="success" type="redirectAction">listUser.action</result>      
		</action>	
	</package>
</struts>     

从上面的配置中很简单看出,就是走Action用拦截器控制一下大小和格式,当然你实际开发的时候,前台的JS和后台的java都要控制的。

3.java(转成流 并读写到指定目录)

    发布后项目中的所有都是部署大屏tomcat(以它为例)下面的webapps的, 所以我直接把图片传到webapps下面 的工程下面以就可以了,建一个目录叫upload,我的目录是user/upload (注意:有的是直接在项目下面就建的目录,也行 不过必须刷新下才能出来,因为tomcat会同步你的项目,当然这里是可以配置的)

           File file = new File("文件夹");//创建新文件  
	           if(file!=null && !file.exists()){  
	               file.createNewFile();  
	           }  
也可以选择让JAVA来创建文件夹的

下面看代码

    private List<File> file;
    private List<String> fileFileName;
    private List<String> fileContentType;//这些基本改声明的变量还是要的和get set方法
    public String add() throws IOException {
        // request.getSession().getServletContext().getRealPath("") 参数可具体到包名。//也可获得    
        String tomcatAdress="D:\\apache-tomcat-6.0.26\\webapps\\optionLog\\user\\upload"//这换成你要放图片的路径,但记住是tomcat中你项目的指定目录下
        File a =new File(tomcatAdress);
	String patch=a.getPath();
        String imgAdress = null;       
        for(int i = 0 ; i < file.size() ; i ++){
            InputStream is = new FileInputStream(file.get(i));	            
            //得到图片保存的位置(根据patch来得到图片保存的路径在tomcat下的该工程里)
            File destFile = new File(patch,System.currentTimeMillis()+this.getFileFileName().get(i));
            imgAdress=System.currentTimeMillis()+this.getFileFileName().get(i);
            //把图片写入到上面设置的路径里
            OutputStream os = new FileOutputStream(destFile);
            byte[] buffer = new byte[1024];
            int length  = 0 ;
            while((length = is.read(buffer))>0){
                os.write(buffer, 0, length);
            }
            is.close();
            os.close();
        }
                user.setImgAdress(imgAdress);
		userService.addUser(user);//user是一个对象有好多属性 imgAdress只是其中之一 
		return "success";
	}


把当前时间+图片文件放到数据库imgAdress字段里面



4.jsp(浏览图片)

    这就简单了 和正常查询一样  

    optionLog 是我的项目名 后面是文件夹名 当然你可以用 <%=this.getServletContext().getContextPath()%> 获得项目名称

                <s:iterator  value="userList">
	        	<tr>
	        	    <td> <img src="/optionLog/user/upload/<s:property value="imgAdress"/>"/></td>
	        	</tr>
	        </s:iterator>

帅气头像展示

完整3大框架上传案例的下载地址:http://download.csdn.net/download/gjldwz/6711995





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值