Struts中上傳檔案需要注意的地方
今天突然想研究下Struts的上傳功能,沒想到搞了兩個小時才搞出來,卡在一個地方,總是報錯說引數型別轉化異常,結果我改動了下頁面,卻又神出鬼沒的上傳成功了,趕緊記錄下
首先是web.xml中的配置,我個人喜歡每次弄個字元過濾器,以免出錯
<filter>
<filter-name>filter</filter-name>
<filter-class>com.wujintao.dao.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
struts-config.xml中的配置,挺奇怪的最後兩行必須得配上
<struts-config>
<!-- ================================================ Form Bean Definitions -->
<form-beans>
<form-bean name="uploadForm" type="com.javacrazyer.web.formbean.UploadForm"/>
</form-beans>
<!-- =========================================== Action Mapping Definitions -->
<action-mappings>
<action path="/upload"
name="uploadForm"
type="com.javacrazyer.web.action.UploadAction">
<forward name="succ" path="/succ.jsp"/>
<forward name="fail" path="/failure.jsp"/>
</action>
</action-mappings>
<controller bufferSize="8192" maxFileSize="1M" />
<message-resources parameter="msgs"/>
</struts-config>
其次就是業務邏輯的程式碼了,在這之前我必須說下,這個Struts的上傳用到的關鍵點就是自己自帶的FormFile類了,因此在FormBean裡面應該配上一個FormFile型別的屬性
private String description; //檔案的描述
private FormFile file; //檔案具體內容對應的例項
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public FormFile getFile() {
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
業務邏輯處理程式碼
//具體業務流程處理方法,由Struts框架回撥
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String toURL = "succ";
//取資料
UploadForm uForm = (UploadForm)form;
String desc = uForm.getDescription();
System.out.println("description==" + desc);
FormFile ff = uForm.getFile();
if(ff == null){
toURL = "fail";
return mapping.findForward(toURL);
}
System.out.println("檔名:" + ff.getFileName());
System.out.println("內容型別:" + ff.getContentType());
System.out.println("檔案大小:" + ff.getFileSize() + "位元組");
BufferedInputStream bis = new BufferedInputStream(ff.getInputStream());
//目標路徑
String destPath = this.getServlet().getServletContext().getRealPath("/files");
System.out.println(destPath+"===============================");
BufferedOutputStream bos = null;
try{
bos = new BufferedOutputStream(new FileOutputStream(destPath + "/" + ff.getFileName()));
//從原始檔中取資料,寫到目標檔案中
byte [] buff = new byte[8192];
for(int len = -1; (len = bis.read(buff)) != -1;){
bos.write(buff, 0, len);
}
bos.flush();
}catch(IOException ie){
ie.printStackTrace();
toURL = "fail";
}finally{
if(bis != null){
try{
bis.close();
}catch(IOException ie){
ie.printStackTrace();
}
}
if(bos != null){
try{
bos.close();
}catch(IOException ie){
ie.printStackTrace();
}
}
}
return mapping.findForward(toURL);
}
接下來我要說的,大家都猜到了肯定是JSP頁面的上傳表單了,這裡就是卡住我的罪魁禍首
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<html:form action="upload.do" enctype="multipart/form-data">
<html:text property="description"></html:text>
<html:file property="file"/>
<html:submit/>
</html:form>
</body>
</html>
為什麼說它是罪魁禍首呢,因為一直都認為<input type="file" />是最佳的上傳表單,誰知道我找了大半天,竟然出現在這裡的它必須是STRUTS標籤的表單元素,鬱悶!!!深刻的教訓啊。
相關文章
- /etc/fstab檔案需要注意的地方
- 檔案上傳需要注意的問題
- element-ui中上傳檔案uploadUI
- delete與delete[]需要注意的地方delete
- jquery獲取ajax傳遞的值一個需要注意的地方jQuery
- struts上傳檔案限制
- margin-top使用需要注意的地方
- struts檔案上傳詳解
- struts1.2 上傳檔案
- js switch語句需要特別注意的地方JS
- link流程 建立時需要注意的地方
- 26個提升java效能需要注意的地方Java
- 在Spring Boot程式中上傳和下載檔案Spring Boot
- springMVC的@ResponseBody、@RequestBody使用需要注意的地方SpringMVC
- oracle over()的使用和需要特別注意的地方Oracle
- 關於Vue專案中上傳檔案到阿里雲OSSVue阿里
- Struts2的檔案上傳下載
- 【Redis】redis-cluster需要注意的幾個地方Redis
- javascript原型繼承constructor需要注意的地方JavaScript原型繼承Struct
- javascript變數宣告需要注意的一個地方JavaScript變數
- 在PHP中使用類可能需要注意的地方PHP
- java打包exe程式需要注意的幾個地方Java
- oracle 11.2.0.3 版本 vote盤需要注意的地方Oracle
- Mac終端中上傳檔案到Linux伺服器MacLinux伺服器
- 【趙勳】在ASP.NET應用程式中上傳檔案ASP.NET
- 如何在ASP.NET中上傳檔案到資料庫ASP.NET資料庫
- 如何在伺服器環境中上傳下載檔案伺服器
- Chrome不能在網易網盤中上傳檔案的解決辦法Chrome
- struts檔案上傳,獲取檔名和檔案型別型別
- selenium 中上傳檔案在 hub 分發機制中,node 上瀏覽器中上傳的是 hub 機上的檔案,這個是怎麼實現的?瀏覽器
- struts2 檔案上傳為空
- 使用Context建立一個View需要注意的地方ContextView
- 行內元素和塊計元素需要注意的地方
- 伺服器搬遷需要注意的幾個地方伺服器
- 使用rman建立standby db,資料檔案目錄結構不同需要注意的地方
- struts動態多檔案上傳實現
- 選擇雲伺服器有哪些需要注意的地方?伺服器
- 開發網路影片直播系統需要注意的地方