Java以struts2為例介紹如何實現(xiàn)圖片上傳
總的說圖片上傳有兩種方式,一種是把圖片文件寫到數(shù)據(jù)庫中,另一種是存到服務器文件目錄中。寫到數(shù)據(jù)庫中的圖片文件需要轉換成二進制流的格式,占用數(shù)據(jù)庫空間比較,適合少量圖片的存儲,比如說,系統(tǒng)中某些小圖標,寫到數(shù)據(jù)庫中的優(yōu)點是比較安全,不容易被用戶不小心刪除。
在struts2中實現(xiàn)(以圖片上傳為例)
1.FileUpload.jsp代碼清單如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>The FileUplaodDemo In Struts2</title> </head> <body> <s:form action="fileUpload" method="post" enctype="multipart/form-data" namespace="/"> <s:file name="myFile" label="MyFile" ></s:file> <s:textfield name="caption" label="Caption"></s:textfield> <s:submit label="提交"></s:submit> </s:form> </body> </html>
2.ShowUpload.jsp的功能清單如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>ShowUpload</title> </head> <body> <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" > <img src ="UploadImages/<s:property value ="imageFileName"/> "/> <br /> <s:property value ="caption"/> </div > </body> </html>
3.FileUploadAction.java的代碼清單如下 :
package com.chris; import java.io.*; import java.util.Date; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class FileUploadAction extends ActionSupport{ private static final long serialVersionUID = 572146812454l ; private static final int BUFFER_SIZE = 16 * 1024 ; //注意,文件上傳時<s:file/>同時與myFile,myFileContentType,myFileFileName綁定 //所以同時要提供myFileContentType,myFileFileName的set方法 private File myFile; //上傳文件 private String contentType;//上傳文件類型 private String fileName; //上傳文件名 private String imageFileName; private String caption;//文件說明,與頁面屬性綁定 public void setMyFileContentType(String contentType) { System.out.println("文件類型 : " + contentType); this .contentType = contentType; } public void setMyFileFileName(String fileName) { System.out.println("文件名稱 : " + fileName); this .fileName = fileName; } public void setMyFile(File myFile) { this .myFile = myFile; } public String getImageFileName() { return imageFileName; } public String getCaption() { return caption; } public void setCaption(String caption) { this .caption = caption; } private static void copy(File src, File dst) { try { InputStream in = null ; OutputStream out = null ; try { in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE); out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE); byte [] buffer = new byte [BUFFER_SIZE]; while (in.read(buffer) > 0 ) { out.write(buffer); } } finally { if ( null != in) { in.close(); } if ( null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } } private static String getExtention(String fileName) { int pos = fileName.lastIndexOf("."); return fileName.substring(pos); } @Override public String execute() { imageFileName = new Date().getTime() + getExtention(fileName); File imageFile = new File(ServletActionContext.getServletContext().getRealPath("UploadImages" ) + "/" + imageFileName); copy(myFile, imageFile); return SUCCESS; } }
注:此時僅為方便實現(xiàn)Action所以繼承ActionSupport,并Overrider execute()方法
在struts2中任何一個POJO都可以作為Action
4.struts.xml清單如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="example" namespace="/" extends="struts-default"> <action name="fileUpload" class="com.chris.FileUploadAction"> <interceptor-ref name="fileUploadStack"/> <result>/ShowUpload.jsp</result> </action> </package> </struts>
5.web.xml清單如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter > <filter-name > struts-cleanup </filter-name > <filter-class > org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class > </filter > <filter-mapping > <filter-name > struts-cleanup </filter-name > <url-pattern > /* </url-pattern > </filter-mapping > <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>Index.jsp</welcome-file> </welcome-file-list> </web-app>
以上內(nèi)容是小編給大家介紹的Java struts2中如何實現(xiàn)圖片上傳的全部內(nèi)容,希望大家喜歡。
相關文章
Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程
Ecppse 使用了 ESP-IDF 中的 Makefile 支持。這意味著您需要從創(chuàng)建 ESP-IDF 項目開始。您可以使用 github 中的 idf-template 項目,接下來通過本文給大家介紹Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程,感興趣的朋友一起看看吧2021-10-10在java中main函數(shù)如何調(diào)用外部非static方法
這篇文章主要介紹了在java中main函數(shù)如何調(diào)用外部非static方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12scala當中的文件操作和網(wǎng)絡請求的實現(xiàn)方法
這篇文章主要介紹了scala當中的文件操作和網(wǎng)絡請求的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06