當前位置:首頁 » 文件管理 » struts2註解文件上傳

struts2註解文件上傳

發布時間: 2023-04-02 08:50:53

『壹』 Struts2中怎麼上傳以*.jar格式結尾的文件看了好都是圖片格式,XML、txt格式等,就是沒有jar格式滴。

下面是我的一個示例
Struts2-文件上傳示例
1.在Struts2項目(Struts2)下導入上傳文件必要的jar包

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

2. 文件上傳頁面(fileUpload.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>文件上傳頁面</title></head>
<body>
<form action="fileupload.action" method="post" enctype="multipart/form-data"><!-- 對於文件上傳,form應滿足的配置 -->
username:<input type="text" name="username"><br/>
file:<input type="file" name="file"><br/>
<input type="submit" value="submit">
</form>
</body>
</html>

3.定義上傳文件的Action( UploadAction.java)

package com.zlc.struts2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
private String username;

private File file;//要上傳的具體文件

private String fileFileName;//表示文件名字(固定寫法)
private String fileContentType;//文件類型(必須滿足約束的名字),定義該欄位將會獲取文件的類型

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public File getFile() {
return file;
}

public void setFile(File file) {
this.file = file;
}

public String getFileFileName() {
return fileFileName;
}

public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}

public String getFileContentType() {
return fileContentType;
}

public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}

@Override
public String execute() throws Exception {

/*HttpServletRequest req = ServletActionContext.getRequest();
String root = req.getRealPath("/upload");//找到文件需要存儲的路徑
*/
String root = ServletActionContext.getServletContext().getRealPath("/upload");//和上面注釋的一樣,都能獲得絕對路徑
InputStream is = new FileInputStream(file);//FileInputStream就從文件系統中的某個文件中獲得輸入位元組。通過打開一個到實際文件的連接來創建一個 FileInputStream

System.out.println("fileFileName: "+fileFileName);//列印一下來獲得文件名

File destFile = new File(root, fileFileName);//創建一個目標文件,指定目標文件的位置和文件名

OutputStream os = new FileOutputStream(destFile);//創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。

byte[] buffer = new byte[4096];
int length=0;
while((length=is.read(buffer))!=-1){//從輸入流中讀取數據的下一個位元組;如果到達流的末尾,則返回 -1
os.write(buffer, 0, length);
/*將指定 byte 數組中從偏移量 0 開始的 length 個位元組寫入此輸出流。
元素 b[0] 是此操作寫入的第一個位元組,b[length-1] 是此操作寫入的最後一個位元組。*/
}
is.close();
os.close();
return SUCCESS;
}
}
4.文件上傳結果頁面,用於顯示結果信息(fileUploadResult.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上傳結果頁面</title>

</head>

<body>
username:<s:property value="username"/><br/>
name:<s:property value="fileFileName"/><br/>
type:<s:property value="fileContentType"/><br/>
</body>
</html>
5. struts2配置文件(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>

<constant name="struts.devMode" value="true" />

<package name="struts2" namespace="/" extends="struts-default">

<action name="fileupload" class="com.zlc.struts2.UploadAction">
<result name="success">/fileUploadResult.jsp</result>
</action>

</package>
</struts>

6.注意一點,別忘了在項目的WebRoot下面建立一個文件夾upload,用以存放上傳的文件

7.在地址欄里輸入http://localhost:8080/Struts2/fileUpload.jsp進行驗證,jar文件是可以上傳的

『貳』 struts2.0怎麼實現上傳文件

一、創建jsp頁面:
注意!要上傳文件,表單必須添加 enctype 屬性,如下: enctype="multipart/form-data"
index.jsp 代碼如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 注意!表單必須添加 enctype 屬性,值為"multipart/form-data" -->
<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="上傳"/>
</form>
</body>
</html>

二、創建Action類:
1. 添加三個私有欄位,並添加相應的get,set方法。
private File file; ——上傳的文件,變數名對應頁面上"file"input的name屬性值。類型為java.io.File
private String fileContentType;——上傳文件的格式類型名,變數名格式為:頁面上"file"input的name屬性值+ContentType
private String fileFileName——上傳的文件名,變數名格式為:頁面上"file"input的name屬性值+fileFileName。
2. 使用struts2提供的FileUtils類拷貝進行文件的拷貝。FileUtils類位於org.apache.commons.io包下。
3. 在項目目錄下的WebContent目錄下添加 upload 文件夾,用於存放客戶端上傳過來的文件,對應第15行代碼。
Upload.java代碼如下:

1 import java.io.File;
2 import java.io.IOException;
3 import org.apache.commons.io.FileUtils;
4 import org.apache.struts2.ServletActionContext;
5 import com.opensymphony.xwork2.ActionSupport;
6
7 public class Upload extends ActionSupport{
8 private File file;
9 private String fileContentType;
10 private String fileFileName;
11
12 @Override
13 public String execute() throws Exception {
14 //得到上傳文件在伺服器的路徑加文件名
15 String target=ServletActionContext.getServletContext().getRealPath("/upload/"+fileFileName);
16 //獲得上傳的文件
17 File targetFile=new File(target);
18 //通過struts2提供的FileUtils類拷貝
19 try {
20 FileUtils.File(file, targetFile);
21 } catch (IOException e) {
22 e.printStackTrace();
23 }
24 return SUCCESS;
25 }
26
27 //省略get,set方法...........
28
29 }

三、在struts.xml中添加相應的配置代碼。
struts.xml代碼如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="upload" class="Upload">
<result>index.jsp</result>
</action>
</package>
</struts>

四、測試。
啟動伺服器,進入index頁面。

選擇一改圖片,點擊上傳提交表單。

打開upload文件夾(注意,這里指的是web伺服器下的目錄,如我用的web伺服器是tomcat安裝在電腦D盤,項目名稱為「Struts2Upload」那麼其路徑為:D:\apache-tomcat-7.0.40\webapps\Struts2Upload\upload)可以看到剛才選中的圖片已經上傳到該目錄下了。

上傳多個文件
一、修改頁面文件
增加繼續添加按鈕和 addfile() 方法,讓頁面可以通過javascript增加 input 標簽。
修改後的 index.jsp代碼如下:

1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <script type="text/javascript">
8 //添加javascript方法 addfile() 在頁面中境加input標簽、
9 function addfile(){
10 var file = document.createElement("input");
11 file.type="file";
12 file.name="file";
13 document.getElementById("fileList").appendChild(file);
14 document.getElementById("fileList").appendChild(document.createElement("br"));
15 }
16 </script>
17 <title>Insert title here</title>
18 </head>
19 <body>
20 <!-- 注意!表單必須添加 enctype 屬性,值為"multipart/form-data" -->
21 <form action="upload.action" method="post" enctype="multipart/form-data">
22 <div id="fileList">
23 <input type="file" name="file" /><br/>
24 </div>
25 <!-- 添加繼續添加按鈕,點擊按鈕調用addfile() -->
26 <input type="button" value="繼續添加" onclick="addfile()" />
27 <input type="submit" value="上傳"/>
28 </form>
29 </body>
30 </html>

二、修改Action類
1. 把三個私有欄位(file,fileContentType,fileFileName)的類型更改為數組或集合類型。並添加相應的get,set方法。
2. 通過循環來上傳多個文件。
修改後的Upload.java代碼如下:

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Upload extends ActionSupport{
//把這三個欄位類型更改為數組或集合
private File[] file;
private String[] fileContentType;
private String[] fileFileName;

@Override
public String execute() throws Exception {
//通過循環來上傳多個文件
for(int i=0;i<file.length;i++){
//得到上傳文件在伺服器的路徑加文件名
String target=ServletActionContext.getServletContext().getRealPath("/upload/"+fileFileName[i]);
//獲得上傳的文件
File targetFile=new File(target);
//通過struts2提供的FileUtils類拷貝
try {
FileUtils.File(file[i], targetFile);
} catch (IOException e) {
e.printStackTrace();
}
}
return SUCCESS;

}

//省略set,get方法...................

}

三、測試
1. 啟動伺服器,打開index.jsp頁面。點擊繼續添加,添加兩個input。同時上傳三張圖片。

2. 點擊上傳提交表單。打開upload文件夾,可以看到剛才選中的三張圖片已經上傳到該目錄下了。

參考資料http://www.cnblogs.com/likailan/p/3330465.html

『叄』 struts2文件上傳中,如何限制上傳的文件類型

只需要在struts配置文件中配置就OK了
案例如下:

<package name="upload" extends="struts-default" namespace="/upload">
<!-- 配置 -->
<action name="upload" class="www.ijava.com.UploadAction" >

<param name="savePath">e:/images/</param>

<!--往fileuploadInterceptor 注入 -->
<interceptor-ref name="defaultStack">
<!-- 改變當前文件運行上傳的類型 -->
<param name="fileUpload.allowedTypes">image/jpeg,image/jpg</param>
<!-- 允許的文件後綴 -->
<param name="fileUpload.allowedExtensions">jpg,jpeg,gif</param>
</interceptor-ref>
<result>/index.jsp</result>
</action>

『肆』 struts2 文件上傳怎麼指定保存文件的路徑和大小

在action配置文件struts.xml里設置(如下):
<package name="upload" extends="struts-default">
<action name="upload" class="">
<!--配置fieldUpload攔截器--->
<interceptor-ref name="fileUpoad">
<param name="allowedTypes">image/bmp,image/png,image/jpg,image/gif</param>
<param name="maximumSize">200000</param>
</interceptor-ref>
<!---必須顯示配置引用struts默認的攔截器棧:defaultStack----->
<interceptor name="defaultStack"></interceptor>
<!---設置上傳路徑----->
<param name="savePath">/upload</param>
<result name="success">/upload_succ.jsp</result>
<result name="input">/upload.jsp</result>
</action>
</package>
希望能幫到你哈....

『伍』 struts2怎樣上傳文件到資料庫

struts2怎樣上傳文件到資料庫中
struts2上傳文件保存到資料庫中,參考代碼如下:
File file=new File("D:/2.jpg");
try {
FileInputStream in=new FileInputStream(file);
int len=0;
byte[] b=new byte[(int) file.length()];
in.read(b);
in.close();
System.out.println(b.length);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

『陸』 struts2如何同時上傳文件以及獲得表單數據

事實上這根本不需要什麼其他配置操作,因為這是Struts2,而不是原生Servlet,在Struts2中,攔截器會將request中的表單數據(或者文件格式的數據)都和action類中的屬性名稱一一對應的注入值(包括文件數據)。所以你需要做的,其實只是在jsp頁面(或html)中加入一個file類型的input標簽,名稱記住(比如為photo),然後在action類中加一個File類型(java.io.File)欄位,此欄位必須和剛剛的input標簽name屬性一致,即photo(private File photo;)。最後,需要注意的是,當你妄圖從網頁上傳一個文件類型的表單時,必須將包圍它的form類將enctype="multipart/form-data" method="post"加上,即method必須為post,且enctype,也就是表單數據類型,必須為二進制的。

『柒』 struts2 文件的上傳和下載,怎麼控制上傳的文件類型啊

<interceptor-ref name="fileUpload">
<param name="allowedTypes">application/octet-stream,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/msexcel</param>
<param name="maximumSize">10048576</param>
</interceptor-ref>
具體內容去struts教程網看看吧。

『捌』 怎樣將struts2上傳文件保存到資料庫中

1在你的struts-config中首先不能使用form,使用的話會報錯
2在你jsp的form中增加屬性enctype="multipart/form-data"
這樣你的文件內容會被都城二進制數據傳到後台,在後台獲取值保存及可以了

熱點內容
替代編程 發布:2024-04-16 19:43:06 瀏覽:504
伺服器搭建多個網站教程 發布:2024-04-16 19:36:58 瀏覽:954
伺服器未發送數據是怎麼回事 發布:2024-04-16 19:20:30 瀏覽:77
android按鈕點擊 發布:2024-04-16 19:10:56 瀏覽:633
編程作文 發布:2024-04-16 18:52:12 瀏覽:656
芒果tv視頻緩存不了 發布:2024-04-16 18:51:07 瀏覽:960
php不等於空 發布:2024-04-16 18:50:55 瀏覽:784
十代半雅閣增加哪些配置 發布:2024-04-16 17:49:55 瀏覽:734
n皇後問題演算法 發布:2024-04-16 17:42:47 瀏覽:236
資料庫相關論文 發布:2024-04-16 17:20:31 瀏覽:17