Struts2学习8--文件上传(单个文件上传)
一、依賴
Struts2利用第三方文件上傳框架:(Myeclispse已配置)進行封裝,沒有jar需自己加上。
Library?????????????????????????????????????? URL???????????????????????????????????????? Struts 2.0.x?????????????????? Struts 2.1.x?
Commons-FileUpload?? http://commons.apache.org/fileupload/?????????? 1.1.1???????????????????????????????? 1.2.1
Commons-IO????????????? http://commons.apache.org/io/???????????????????? 1.0?????????????????????????????????? 1.3.2
二、單個文件上傳
JSP:
<s:form action="doUpload" method="post" enctype="multipart/form-data"><s:file name="doc" label="File"/><s:submit/>注:那個file 的name是自己取的。
action:
?
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport {private File doc;private String docContentType; //文件類型屬性private String docFileName; //文件名private String path;public String execute() {FileOutputStream fos = null;FileInputStream fis = null;try {// 建立文件輸出流String filename = getFileName(getDocFileName());fos = new FileOutputStream(getPath() + "\\" + filename);// 建立文件上傳流fis = new FileInputStream(getDoc());byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) > 0) {fos.write(buffer, 0, len);}} catch (Exception e) {System.out.println("文件上傳失敗");e.printStackTrace();} finally {close(fos, fis);}return SUCCESS;}private void close(FileOutputStream fos, FileInputStream fis) {if (fis != null) {try {fis.close();} catch (IOException e) {System.out.println("FileInputStream關閉失敗");e.printStackTrace();}}if (fos != null) {try {fos.close();} catch (IOException e) {System.out.println("FileOutputStream關閉失敗");e.printStackTrace();}} }//生成一個新的文件名private String getFileName(String fileName) {int position = fileName.lastIndexOf(".");String extension = fileName.substring(position);return System.currentTimeMillis()+extension;}public String getDocFileName() {return docFileName;}public void setDocFileName(String docFileName) {this.docFileName = docFileName;}public String getPath() {return ServletActionContext.getServletContext().getRealPath(path);}public void setPath(String path) {this.path = path;}public String getDocContentType() {return docContentType;}public void setDocContentType(String docContentType) {this.docContentType = docContentType;}public File getDoc() {return doc;}public void setDoc(File doc) {this.doc = doc;} } View Code?
action配置(用了個參數,我覺得不錯)
<action name="doUpload" class="com.meetcomet.util.FileUploadAction"><param name="path">/upload</param><result name="input">/index.jsp</result><result name="success">/upload_success.jsp</result></action>?
調試過程中的錯誤:
1)上傳文件夾不存在。
2)action中的屬性缺乏getset。(直接用是會錯的...值沒有賦上去。)
三、實現文件上傳過濾
通過配置攔截器來實現的
<struts><constant name="struts.devMode" value="true" /> <constant name="struts.custom.i18n.resources" value="globalMessg" /><constant name="struts.il8n.encoding" value="utf-8"/> <!-- 指定允許上傳的文件最大字節數。默認值是2097152(2M) --><constant name="struts.multipart.maxSize" value="10701096"/><!-- 設置上傳文件的臨時文件夾,默認使用javax.servlet.context.tempdir --><constant name="struts.multipart.saveDir " value="d:/tmp" /><package name="/" extends="struts-default"><action name="doUpload" class="com.meetcomet.util.FileUploadAction"><param name="path">/upload</param><result name="input">/index.jsp</result><result name="success">/upload_success.jsp</result><interceptor-ref name="fileUpload"><!-- 文件過濾 --><param name="allowedTypes">image/bmp,image/x-png,image/gif,image/pjpeg</param><!-- 文件大小, 以字節為單位 --><param name="maximumSize">1025956</param></interceptor-ref><!-- 默認攔截器必須放在fileUpload之后,否則無效 --><interceptor-ref name="defaultStack" /></action></package></struts>?
?
轉載于:https://www.cnblogs.com/meetcomet/p/3412804.html
總結
以上是生活随笔為你收集整理的Struts2学习8--文件上传(单个文件上传)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 感慨
- 下一篇: 学习Qt的资源-网站、论坛、博客等