拦截器与文件上传

Posted aluoka

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拦截器与文件上传相关的知识,希望对你有一定的参考价值。

拦截器与文件上传


三种上传方案:
1、上传到tomcat服务器(不能及时刷新)
2、上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系
文件服务器(目前公司用的最常用的方法)
3、在数据库表中建立二进制字段,将图片存储到数据库(处理上百万的数据不方便)

 

完成图片上传:

写两个方法:1.上传图片2.跳转文件上传页面。

 1     private File file;
 2     private String fileContentType;
 3     private String fileFileName;
 4 /**
 5      * 直接上传图片
 6      * @return
 7      * @throws IOException 
 8      */
 9     public String upload() throws IOException 
10         //注意:在Linux下是没有E盘的 linnx下只有一个盘符,那么意味着,当打包到linux服务器的时候需要改动代码
11         //这个时候通常是这么解决的,将targetPath对应目录串,配置到资源文件中,通过Properties类进行动态读取
12         //那么当需要将项目发布到Linux服务器的时候,只需要改变xxx.preperties文件中targetPath=/caoluo/img
13         
14         //实际图片存储的位置
15         String targetDir="D:/杂七杂八/上传图片";
16         
17         //存到数据库中的地址
18         String severPath="/upload";
19         FileUtils.copyFile(file, new File(targetDir+"/"+fileFileName));
20         //注意: 数据库存放是网络请求地址,而不是本地存放图片地址
21         clz.setPic(severPath+"/"+fileFileName);
22         this.clzDao.edit(clz);
23         return "toList";
24     
25     /**
26      * 跳转文件上传页面
27      * @return
28      */
29     public String preUpload() 
30         Clazz c=this.clzDao.list(clz, null).get(0);
31         request.setAttribute("clz", c);
32         return "toUpload";
33     

struts_sy.xml配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
 4     "http://struts.apache.org/dtds/struts-2.5.dtd">
 5 <struts>
 6     <package name="sy" extends="base" namespace="/sy"> 
 7         <action name="/clz_*" class="com.web.ClazzAction" method="1">
 8            <result name="list">/clzList.jsp</result>
 9            <result name="preSave">/clzEdit.jsp</result>
10            <result name="toList" type="redirectAction">/clz_list</result>
11            <result name="toUpload">/upload.jsp</result>
12         </action>
13     </package>
14 </struts>

然后写一个上传图片的jsp页面

 1 <body>
 2 <form action="$pageContext.request.contextPath /sy/clz_upload.action" method="post" enctype="multipart/form-data">
 3         <input type="hidden" name="cid" value="$clz.cid "> <br>
 4         <input type="hidden" name="cname" value="$clz.cname "> <br>
 5         <input type="hidden" name="cteacher" value="$clz.cteacher "> <br>
 6         <!-- 注意:name对应的值决定了 自控制器action属性的命名 -->
 7         <input type="file" name="file">
 8         <input type="submit">
 9     </form>
10 </body>

在server.xml中添加一行代码

 <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
<Context path="/T_caoluo/upload" docBase="D:/杂七杂八/上传图片/"/>
      <Context docBase="T_caoluo" path="/T_caoluo" reloadable="true" source="org.eclipse.jst.jee.server:T_caoluo"/></Host>
    </Engine>
  </Service>

首页显示图片:

 1         <c:forEach items="$clzList " var="c">
 2             <tr>
 3                 <td>$c.cid </td>
 4                 <td>$c.cname </td>
 5                 <td>$c.cteacher </td>
 6                 <td>
 7                 <img  style="width: 60px;height: 60px" src="$pageContext.request.contextPath $c.pic ">
 8                 </td>
 9                 <td>
10                     <a href="$pageContext.request.contextPath /sy/clz_preSave.action?cid=$c.cid ">修改</a>&nbsp;&nbsp;
11                     <a href="$pageContext.request.contextPath /sy/clz_del.action?cid=$c.cid ">删除</a>&nbsp;&nbsp;
12                     <a href="$pageContext.request.contextPath /sy/clz_preUpload.action?cid=$c.cid ">上传图片</a>&nbsp;&nbsp;
13                 </td>
14             </tr>
15         </c:forEach>

 

然后运行:

选择一个图片确认上传

技术图片

 

效果图:

技术图片

完成;

以上是关于拦截器与文件上传的主要内容,如果未能解决你的问题,请参考以下文章

利用Struts拦截器完成文件上传功能

nestjs 文件上传

Spring MVC 学习笔记 --- [SpringMVC的文件上传与拦截器,以及更新登录用户头像的简易案例]

深入分析JavaWeb Item47 -- Struts2拦截器与文件上传下载

SpringMVC08:拦截器+文件上传下载

SpringMVC文件上传和拦截器