日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > struts2文件上傳

struts2文件上傳

來源:程序員人生   發布時間:2016-06-06 08:18:05 閱讀次數:4109次

文件上傳

       文件上傳幾近是每一個web利用實現的1個必須模塊。文件上傳的實現需要將表單元素屬性enctype的值設置為multipart/form-data,使表單數據以2進制編碼的方式提交。在接收此要求的Servlet中使用2進制流來獲得內容,就能夠獲得上傳文件的內容,從而實現文件的上傳。

上傳原理

在struts2中進行文件上傳時,先需要將Form表單的enctype屬性進行重新設置,該屬性的取值就是決定表單數據的編碼方式,有以下3個可選值:
       1)application/x-www-form-urlencoded.這是默許的編碼方式。只處理表單域里的value屬性值,采取這類編碼方式的表單會將表單域的值處理成URL編碼方式。
       2)multipart/form-data.這類編碼方式的表單會以2進制流的方式來處理表單數據,將文件域指定文件的內容也封裝到要求參數中。
       3)text/plain.當表單的action屬性值為mailto:URL的情勢時,這類編碼方式比較方便,它主要適用于直接通過表單發送郵件。

  文件上傳實例

實體類:
  
public class User { private String name;//姓名 private String photo;//照片 private int age;//年齡 private int sex;//性別 private String icard;//身份證號 private String phone;//聯系電話 private String address;//聯系地址 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoto() { return photo; } public void setPhoto(String photo) { this.photo = photo; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getIcard() { return icard; } public void setIcard(String icard) { this.icard = icard; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
Action類:
public class UserAction extends ActionSupport { private static final int BUFFER_SIZE = 40 * 40; private File upload;// 封裝上傳文件域的 private String uploadContentType;// 封裝上傳文件的類型 private String uploadFileName;// 封裝上傳文件名 private String savePath;// 封裝上傳文件的保存路徑 private User user;// 創建User類對象user public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } private static void copy(File source, File target) { InputStream inputStream = null;// 聲明1個輸入流 OutputStream outputStream = null;// 聲明1個輸出流 try { // 實例化輸入流 inputStream = new BufferedInputStream(new FileInputStream(source), BUFFER_SIZE); outputStream = new BufferedOutputStream( new FileOutputStream(target), BUFFER_SIZE);// 實例化輸出流 byte[] buffer = new byte[BUFFER_SIZE];// 定義字節數組buffer int length = 0;// 定義臨時參數對象 while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length);// 如果上傳的文件字節數大于0,將內容以字節情勢寫入 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != inputStream) { try { inputStream.close();// 關閉輸入流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (null != outputStream) { try { outputStream.close();// 關閉輸出流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Override public String execute() throws Exception { // 根據服務器的文件保存地址和源文件名創建目錄文件全路徑 System.out.println("1" + this.getSavePath()); System.out.println("2" + this.getUploadFileName()); System.out.println("3" + this.getUpload()); System.out.println("4" + this.getTexts()); System.out.println("5" +this.getUploadContentType()); System.out.println("6" +ServletActionContext.getServletContext().getContextPath()); String path = ServletActionContext.getServletContext().getRealPath( this.getSavePath()) + "//" + this.getUploadFileName(); System.out.println(path); System.out.println("uploadFilename: " + uploadFileName); System.out.println("file: " + upload.getName()); System.out.println("file: " + upload.getPath()); user.setPhoto(this.uploadFileName);// 將上傳的文件名稱賦值給User類中的photo屬性 File target = new File(path);// 定義目標文件對象 copy(this.upload, target);// 調用copy方法,實現文件的寫入 return SUCCESS; } }

struts.xml中的配置,
<action name="user" class="com.mxl.action.UserAction"> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> image/pjpeg,image/x-png,image/gif,image/bmp </param> <param name="maximumSize">5000</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <param name="savePath">/upload</param> <result>/show_file.jsp</result> <result name="input">/index.jsp</result> </action>
上傳界面:
<s:form action="user" namespace="/" method="post" enctype="multipart/form-data"> <s:textfield name="user.name" label="姓名" size="20"/> <s:file name="upload" label="形象" size="20"/> <s:textfield name="user.age" label="年齡" size="20"/> <s:radio list="#{1:'男',2:'女'}" name="user.sex" listKey="key" listValue="value" value="1" label="性別" cssStype="border:0px;"/> <s:textfield name="user.icard" label="身份證號" size="20"/> <s:textfield name="user.phone" label="聯系電話" size="20"/> <s:textfield name="user.address" label="家庭住址" size="20"/> <s:submit value="肯定錄入" align="center"/> </s:form>
顯示界面:
<table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td width="300px" align="right">姓名:</td> <td width="100px" align="left"><s:property value="user.name" /> </td> <td rowspan="5" align="center"><img src="upload/<s:property value="uploadFileName"/>"/><br />您的形象</td> </tr> <tr> <td width="300px" align="right">年齡:</td> <td><s:property value="user.age"/></td><td></td> </tr> <tr> <td width="300px" align="right">性別:</td> <td> <s:if test="user.sex==1"> 男 </s:if> <s:else> 女 </s:else> </td><td></td> </tr> <tr> <td width="300px" align="right">身份證號:</td> <td><s:property value="user.icard"/></td><td></td> </tr> <tr> <td width="300px" align="right">聯系電話:</td> <td><s:property value="user.phone"/></td><td></td> </tr> <tr> <td width="300px" align="right">家庭住址:</td> <td><s:property value="user.address"/></td><td></td> </tr> </table>
多文件上傳實例:
數組實現多文件上傳,
Action類,
public class DocArrayAction extends ActionSupport{ private String name;//上傳者 private File[] upload;//封裝上傳文件的屬性 private String[] uploadContentType;//封裝上傳文件的類型 private String[] uploadFileName;//封裝上傳文件名 private String savePath;//封裝上傳文件保存路徑 private Date createTime;//上傳時間 public String getName() { return name; } public void setName(String name) { this.name = name; } public File[] getUpload() { return upload; } public void setUpload(File[] upload) { this.upload = upload; } public String[] getUploadContentType() { return uploadContentType; } public void setUploadContentType(String[] uploadContentType) { this.uploadContentType = uploadContentType; } public String[] getUploadFileName() { return uploadFileName; } public void setUploadFileName(String[] uploadFileName) { this.uploadFileName = uploadFileName; } public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public Date getCreateTime(){//實例化日期 createTime = new Date(); return createTime; } private static void copy(File source, File target) { InputStream inputStream = null;// 聲明1個輸入流 OutputStream outputStream = null;// 聲明1個輸出流 try { // 實例化輸入流 inputStream = new BufferedInputStream(new FileInputStream(source)); outputStream = new BufferedOutputStream( new FileOutputStream(target));// 實例化輸出流 byte[] buffer = new byte[1024];// 定義字節數組buffer int length = 0;// 定義臨時參數對象 while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length);// 如果上傳的文件字節數大于0,將內容以字節情勢寫入 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != inputStream) { try { inputStream.close();// 關閉輸入流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (null != outputStream) { try { outputStream.close();// 關閉輸出流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Override public String execute() throws Exception { for(int i = 0; i < upload.length; i++){ String path = ServletActionContext.getServletContext().getRealPath( this.getSavePath()) + "//" + this.uploadFileName[i]; File target = new File(path);// 定義目標文件對象 copy(this.upload[i], target);// 調用copy方法,實現文件的寫入 } return SUCCESS; } }

配置:
<action name="doc" class="com.mxl.action.DocArrayAction"> <interceptor-ref name="fileUpload"> <param name="maximumSize">50000</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <param name="savePath">/upload</param> <result>/show_doc.jsp</result> <result name="input">/input_doc.jsp</result> </action>

上傳界面:
<s:form action="doc" namespace="/" method="post" enctype="multipart/form-data"> <s:textfield name="name" label="姓名" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:submit value="肯定上傳" align="center"/> </s:form>
上傳成功界面:
<font style="font-size:12px; color:red">上傳者<s:property value="name"/></font> <table cellpadding="0" cellspacing="0"> <tr> <th>文件名稱</th> <th>上傳時間</th> </tr> <s:iterator value="uploadFileName" status="st"> <tr> <td><s:property value="uploadFileName[#st.getIndex()]"/></td> <td><s:date name="createTime" format="yyyy-MM-dd HH:mm:ss"/></td> </tr> </s:iterator> </table>
List實現多文件上傳:
Action類:
public class DocListAction extends ActionSupport{ private String name; private List<File> upload; private List<String> uploadContentType; private List<String> uploadFileName; private String savePath; private Date createTime; public String getName() { return name; } public void setName(String name) { this.name = name; } public List<File> getUpload() { return upload; } public void setUpload(List<File> upload) { this.upload = upload; } public List<String> getUploadContentType() { return uploadContentType; } public void setUploadContentType(List<String> uploadContentType) { this.uploadContentType = uploadContentType; } public List<String> getUploadFileName() { return uploadFileName; } public void setUploadFileName(List<String> uploadFileName) { this.uploadFileName = uploadFileName; } public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public Date getCreateTime(){ createTime = new Date(); return createTime; } public void setCreateTime(Date createTime){ this.createTime = createTime; } private static void copy(File source, File target) { InputStream inputStream = null;// 聲明1個輸入流 OutputStream outputStream = null;// 聲明1個輸出流 try { // 實例化輸入流 inputStream = new BufferedInputStream(new FileInputStream(source)); outputStream = new BufferedOutputStream( new FileOutputStream(target));// 實例化輸出流 byte[] buffer = new byte[1024];// 定義字節數組buffer int length = 0;// 定義臨時參數對象 while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length);// 如果上傳的文件字節數大于0,將內容以字節情勢寫入 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != inputStream) { try { inputStream.close();// 關閉輸入流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (null != outputStream) { try { outputStream.close();// 關閉輸出流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Override public String execute() throws Exception { for(int i = 0; i < upload.size(); i++){ String path = ServletActionContext.getServletContext().getRealPath( this.getSavePath()) + "//" + this.uploadFileName.get(i); File target = new File(path);// 定義目標文件對象 copy(this.upload.get(i), target);// 調用copy方法,實現文件的寫入 } return SUCCESS; } }
配置:
<action name="docList" class="com.mxl.action.DocListAction"> <interceptor-ref name="fileUpload"> <param name="maximumSize">50000</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <param name="savePath">/upload</param> <result>/show_docList.jsp</result> <result name="input">/input_docList.jsp</result> </action>

上傳界面:
<s:form action="docList" namespace="/" method="post" enctype="multipart/form-data"> <s:textfield name="name" label="姓名" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:file name="upload" label="選擇文檔" size="20"/> <s:submit value="肯定上傳" align="center"/> </s:form>

成功界面:
<font style="font-size:12px; color:red">上傳者<s:property value="name"/></font> <table cellpadding="0" cellspacing="0"> <tr> <th>文件名稱</th> <th>上傳時間</th> </tr> <s:iterator value="uploadFileName" status="st" var="doc"> <tr> <td><a href="downLoad.action?downPath=upload/<s:property value="#doc"/>"><s:property value="#doc"/></a></td> <td><s:date name="createTime" format="yyyy-MM-dd HH:mm:ss"/></td> </tr> </s:iterator> </table>








生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产一区二区视频在线观看免费 | 夜夜99 | 久久6| 人成福利视频在线观看 | 亚洲一区二区三区四区五区中文 | 在线观看国产一区 | 国产激情精品一区二区三区 | 国产午夜激情 | 亚洲视频在线观看网址 | 黄网站在线免费看 | 国产精品成人国产乱一区 | 国产最新av | 亚洲日本va中文字幕久久 | 亚洲国产精品久久久久久 | 亚洲人综合网 | 久久综合国产伦精品免费 | 亚洲一区二区在线免费观看 | 亚洲精品电影在线观看 | 成人在线视频一区 | 一级a毛片在线观看 | 亚洲成人在线网站 | 日韩欧美三区 | 精品一区二区免费视频 | 夜夜操天天干 | 亚洲色图20p| 久久免费看片 | 国产精品18hdxxxⅹ在线 | 精品午夜一区二区 | 欧美成人精品一区二区三区 | 日韩黄色影视 | 999成人网 | 三级波多野结衣护士三级 | 在线免费观看毛片 | 亚洲成人在线视频播放 | 成年网站在线 | 亚洲精品午夜 | 91精品国产日韩91久久久久久 | av在线精品 | 99re久久 | 国产伦精品一区二区三区四区免费 | 黄色免费大全 |