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

来源:互联网 发布:淘宝推广工具排名 编辑:程序博客网 时间:2024/05/01 15:17

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

废话少说  简单说下流程,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
原创粉丝点击