Struts2實現(xiàn)文件上傳,并顯示。
第一、實現(xiàn)JSP
<%@ page contentType="text/html; charset=GBK" language="java" %>
<%@ include file="../../../inc/taglibs.jsp"%>
<userCountyGrade:check/>
<html><meta http-equiv="Content-Type" content="text/html; charset=GBK">
<link href="admin/myweb.css" rel="stylesheet" type="text/css">
<title>${html_title}</title>
<head>
<style type="text/css">
<!--
body {
background-image: url(admin/main_bg.gif);
}
-->
</style></head>
<body>
<br>
<table width="99%" cellpadding="0" cellspacing="0" border="0" align="center">
<s:form validate="true" action="userInfoCounty_addStakeout" enctype="multipart/form-data" method="post">
<tr>
<td>
<table width="82" height="28" border="0" cellpadding="0" cellspacing="0" background="admin/main_menu_bg.gif">
<tr>
<td valign="bottom"><div align="center" class="xiaoyu_font">監(jiān)測點位注冊</div></td>
</tr>
</table>
</td>
</tr>
</table>
<table width="99%" cellpadding="3" cellspacing="1" border="0" align="center" class="main_table">
<tr>
<td colspan="3" align="center" class="main_topbg" ></td>
</tr>
<tr>
<td colspan="3" align="left" class="myweb_td" >
<div class="xiaoyu_font_fielderror"><s:fielderror/></div>
</td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測點編號:<FONT color="red">*</FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:textfield name="localityCode" size="15" maxlength="10"/>
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測點名稱:<FONT color="red">*</FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:textfield name="rqName" size="15" maxlength="10"/>
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測點類型:<FONT color="red">*</FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:select list="#application['app_9JCDLX']" name="rqFlag" listKey="btSmallClassId" listValue="btSmallClassName" ></s:select>
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測類型:<FONT color="red">*</FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:select list="#application['app_4JCLX']" name="rqType" listKey="btSmallClassId" listValue="btSmallClassName" ></s:select>
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測點經(jīng)度:<FONT color="red">*</FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:textfield name="rqLongitude" size="15" maxlength="10"/>°
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測點緯度:<FONT color="red">*</FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:textfield name="rqLatitude" size="15" maxlength="10"/>°
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測點照片:<FONT color="red"></FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:file name="upload" size="15" ></s:file>
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr >
<td width="162" class="myweb_td" >監(jiān)測點描述:<FONT color="red"></FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<s:textarea name="rqDescription" rows="5" cols="30" onkeyup="if(this.value.length > 400) this.value=this.value.substr(0,400)" ></s:textarea>
</td>
<td class="myweb_td" width="771"></td>
</tr>
<tr>
<td colspan="3" class="myweb_td" align="center">
<input name="submit" type="submit" value="提交信息" />
<input name="submit" type="button" value="返 回" onclick="window.open('index.action?action=/manager/county_user/stakeout_dot_manage/stakeout_manage','main')" />
</td>
</tr>
</s:form>
</table>
</body>
</html>第二、Action具體實現(xiàn)
Action內(nèi)添加如下字段。
private File upload;
private String uploadContentType;
private String uploadFileName;//接受依賴注入的屬性
private String savePath;
//接受依賴注入的方法
public void setSavePath(String value){
this.savePath = value;
}// private String getSavePath() throws Exception {
// return ServletActionContext.getRequest().getRealPath(savePath);
// }
public void setUpload(File upload) {
this.upload = upload;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public File getUpload() {
return (this.upload);
}
public String getUploadContentType() {
return (this.uploadContentType);
}
public String getUploadFileName() {
return (this.uploadFileName);
}將流存入數(shù)據(jù)庫
BeanUtils.populate(uis, BeanUtils.describe(userinfo));
uis.setRqDate(new java.util.Date());
// System.out.println("sdfdsfdsfdsfs:"+uis.getRqImage().toString());
// System.out.println("sdfdsfdsfdsfs:"+userinfo.getUpload());
if(userinfo.getUpload()!=null){
//設(shè)置圖片
FileInputStream fis = new FileInputStream(userinfo.getUpload());
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
uis.setRqImage(buffer);
// byte[] s =uis.getRqImage();
// for(int i=0; i<s.length; i++){
// System.out.print(s[i]);
// }
}
if(userinfo.getRadializationQualityService().save(uis)!=null){
userinfo.setInfoStr("監(jiān)測點注冊成功!","index.action?action=/manager/county_user/stakeout_dot_manage/stakeout_manage");
return "succeed";
}else{
userinfo.setInfoStr("監(jiān)測點注冊失敗","index.action?action=/manager/county_user/stakeout_dot_manage/stakeout_manage");
return "error";
}
第三、從數(shù)據(jù)庫中讀出圖片
public String showStakeout(StakeoutAction userinfo){
System.out.println("UserInfoCounty showStakeout");
try{
AbstractRadializationQuality ui = userinfo.getRadializationQualityService().findById(userinfo.getId());
if(ui==null){
userinfo.setInfoStr("沒找到你選擇監(jiān)測點!","userInfoCounty_searchStakeout.action");
return "error";
}
//BeanUtils.populate(userinfo, BeanUtils.describe(ui));
BeanUtils.copyProperties(userinfo,ui);
userinfo.setRqDate(ui.getRqDate());
//這里將圖片流存入Session
userinfo.getSession().put("SES_StakeoutImage", userinfo.getRqImage());
//設(shè)置顯示 用戶信息
AbstractUserInfo au = (AbstractUserInfo)userinfo.getUserInfoService().findUserInfoId(ui.getRqUser());
if(au!=null){
userinfo.setShowUserName(au.getUiName());
userinfo.setShowUiId(au.getUiId());
}
return "/manager/county_user/stakeout_dot_manage/stakeout_show";
}catch(Exception e){
e.printStackTrace();
userinfo.setInfoStr("系統(tǒng)錯誤請聯(lián)系管理員!","userInfoCounty_searchStakeout.action");
return "error";
}
}
第四、Servlet從Session中讀出圖片
package com.radialization.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class StakeoutImage extends HttpServlet {
private static final long serialVersionUID = -7862035188698463539L;
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
byte[] image = (byte[])req.getSession().getAttribute("SES_StakeoutImage");
java.io.OutputStream out = null;
byte [] bytes = null;
if(image!=null){
java.io.ByteArrayInputStream bi = new java.io.ByteArrayInputStream(image);
//二進制輸出流
res.setContentType( "multipart/form-data" );
//得到輸出流
out = res.getOutputStream();
//從輸入流讀取數(shù)據(jù)到輸出流
bytes = new byte [ 1024 ];
while ( -1 != bi.read( bytes ) ) {
out.write( bytes );
}
//強制刷新輸出流
out.flush();
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {
doGet(req, res);
}
}第五、JSP頁面中圖片上的SRC訪問Servlet
<tr >
<td width="162" class="myweb_td" >監(jiān)測點照片:<FONT color="red"></FONT></td>
<td width="295" class="myweb_td" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor=''">
<img alt="" src="stakeoutImage">
</td>
<td class="myweb_td" width="771"></td>
</tr>第六、Struts.xml配置
<action name="*_addStakeout" class="com.radialization.struts.action.StakeoutAction" method="addStakeout">
<!-- 圖片大小與圖片類型過濾 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/pjpeg</param>
<param name="maximumSize">300000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<result name="input">/${inputAddStakeout}.jsp</result>
</action>以上文章為原創(chuàng),轉(zhuǎn)載時就表示轉(zhuǎn)載處。