Struts 2を使用してファイルのアップロードとダウンロードを実現
36171 ワード
(一)単一ファイルのアップロード手順:
1.jarパッケージのコピー:commons-fileupload.jar, commons-io.jar
ダウンロードリンク(ファイルアップロード.rar):http://www.cnblogs.com/withyou/admin/Files.aspx
2.JSPページにformを追加:(form属性は固定)
3.actionレイヤコード:
4.Java取得パスの情報a.をいくつか補充する.webサーバの下のファイルパス(tomcatなどのサーバインストールディレクトリ/webapp/エンジニアリング/)requestを取得する.getRealPath("/") ;application.getRealPath(")【jsp中];ServiceletContext().getRealPath("")
例:request.getRealPath(「web.xml」)の結果は、C:Program FilesApache Software FoundationTomcat 5.5webappsstrutsTestweb.xml
b.ローカルパスの取得
this.getClass().getClassLoader().getResource("").getPath(); ==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/ this.getClass().getResource("").getPath().toString(); ==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/bl/
c.相対パスを取得する:
request.getContextPath();
(二)複数のファイルのアップロード手順:
1.jarパッケージをコピーします.
2.jspコードは以下の通りです.
View Code
3.アクションレイヤコード:
View Code
(三)ファイルのダウンロード:
1.actionレイヤコード:
2.struts.xml構成:
3.ブラウザの直接入力:http://localhost:8080/downloadActionアクセス、ダウンロードできます.
1.jarパッケージのコピー:commons-fileupload.jar, commons-io.jar
ダウンロードリンク(ファイルアップロード.rar):http://www.cnblogs.com/withyou/admin/Files.aspx
2.JSPページにformを追加:(form属性は固定)
<form action= "uploadAction" enctype="multipart/form-data" method="post" >
:<input type="text" name="uname" /><br/>
:<input type="file" name="fileUpload" /><br/>
<input type="submit" value=" " />
</form>
3.actionレイヤコード:
1 public class UploadAction {
2 private String uname;
3 private File fileUpload;
4 private String fileUploadFileName;// File +FileName,( )
5 public String execute() throws IOException{
6 String path = ServletActionContext.getServletContext().getRealPath("/fileUpload/");// path tomcat webapp/ /
7 for(int i = 0;i<fileUpload.length;i++){
8 String[] fielNameArray = fileUploadFileName[i].split("\\.");
9 // ,UUID
10 FileUtils.copyFile(fileUpload[i],new File(path+"\\"+UUID.randomUUID()+"."+fielNameArray[fielNameArray.length-1]));
11 }
12 return null;
13 }
14 public String getUname() {
15 return uname;
16 }
17
18 public void setUname(String uname) {
19 this.uname = uname;
20 }
21
22 public File[] getFileUpload() {
23 return fileUpload;
24 }
25
26 public void setFileUpload(File[] fileUpload) {
27 this.fileUpload = fileUpload;
28 }
29
30 public String[] getFileUploadFileName() {
31 return fileUploadFileName;
32 }
33
34 public void setFileUploadFileName(String[] fileUploadFileName) {
35 this.fileUploadFileName = fileUploadFileName;
36 }
37 }
4.Java取得パスの情報a.をいくつか補充する.webサーバの下のファイルパス(tomcatなどのサーバインストールディレクトリ/webapp/エンジニアリング/)requestを取得する.getRealPath("/") ;application.getRealPath(")【jsp中];ServiceletContext().getRealPath("")
例:request.getRealPath(「web.xml」)の結果は、C:Program FilesApache Software FoundationTomcat 5.5webappsstrutsTestweb.xml
b.ローカルパスの取得
this.getClass().getClassLoader().getResource("").getPath(); ==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/ this.getClass().getResource("").getPath().toString(); ==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/bl/
c.相対パスを取得する:
request.getContextPath();
(二)複数のファイルのアップロード手順:
1.jarパッケージをコピーします.
2.jspコードは以下の通りです.
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2 <%
3 String path = request.getContextPath();
4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
5 %>
6
7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
8 <html>
9 <head>
10 <base href="<%=basePath%>">
11 <title>My JSP 'upload.jsp' starting page</title>
12 <script src="js/jquery-1.4.4.js"></script>
13 <script type="text/javascript">
14 /* */
15 function addFileButton(){
16 var fileStr = "<div> :<input type='file' name='fileUpload' /> <input type='button' value=' ' onclick='delFileButton(this);' /><br/></div>";
17 $("#div1").append(fileStr);
18 }
19 /* */
20 function delFileButton(obj){
21 obj.parentNode.parentNode.removeChild(obj.parentNode);
22 }
23 </script>
24 </head>
25 <body>
26 <form action= "uploadAction" enctype="multipart/form-data" method="post" >
27 :<input type="text" name="uname" /><br/>
28 <fieldset>
29 <legend><input type="button" value=" " onclick="addFileButton();" /></legend>
30 <div id="div1">
31 <div> :<input type="file" name="fileUpload" /><input type="button" value=" " onclick="delFileButton(this);" /><br/></div>
32 </div>
33 </fieldset>
34 <input type="submit" value=" " />
35 </form>
36 </body>
37 </html>
View Code
3.アクションレイヤコード:
1 package com.bjsxt.struts2.action;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.UUID;
6
7 import org.apache.commons.io.FileUtils;
8 import org.apache.struts2.ServletActionContext;
9
10 public class UploadAction {
11 private String uname;
12 private File[] fileUpload;
13 private String[] fileUploadFileName;// File +FileName;
14 public String execute() throws IOException{
15 System.out.println("--------uname-------"+uname);
16 String path = ServletActionContext.getServletContext().getRealPath("/fileUpload/");
17 System.out.println(path);
18 for(int i = 0;i<fileUpload.length;i++){
19 String[] fielNameArray = fileUploadFileName[i].split("\\.");
20 FileUtils.copyFile(fileUpload[i],new File(path+"\\"+UUID.randomUUID()+"."+fielNameArray[fielNameArray.length-1]));
21 }
22 return null;
23 }
24 public String getUname() {
25 return uname;
26 }
27
28 public void setUname(String uname) {
29 this.uname = uname;
30 }
31
32 public File[] getFileUpload() {
33 return fileUpload;
34 }
35
36 public void setFileUpload(File[] fileUpload) {
37 this.fileUpload = fileUpload;
38 }
39
40 public String[] getFileUploadFileName() {
41 return fileUploadFileName;
42 }
43
44 public void setFileUploadFileName(String[] fileUploadFileName) {
45 this.fileUploadFileName = fileUploadFileName;
46 }
47 }
View Code
(三)ファイルのダウンロード:
1.actionレイヤコード:
1 package com.bjsxt.hib.action;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.InputStream;
7 import java.io.UnsupportedEncodingException;
8
9 public class DownloadAction {
10 private InputStream inputStream;
11 private String fileName;
12
13 public String execute(){
14 try {
15 this.inputStream = new FileInputStream("D:\\123.txt");// ( )
16 this.fileName = " .txt";
17 } catch (FileNotFoundException e) {
18 e.printStackTrace();
19 }
20 return "success";
21 }
22 public InputStream getInputStream() {
23 return inputStream;
24 }
25 public void setInputStream(InputStream inputStream) {
26 this.inputStream = inputStream;
27 }
28 /* */
29 public String getFileName() {
30 String temp=null;
31 try {
32 temp = new String(this.fileName.getBytes(),"ISO-8859-1");
33 } catch (UnsupportedEncodingException e) {
34 e.printStackTrace();
35 }
36 return temp;
37 }
38 public void setFileName(String fileName) {
39 this.fileName = fileName;
40 }
41
42 }
2.struts.xml構成:
1 <action name="downloadAction" class="com.bjsxt.hib.action.DownloadAction">
2 <result name="success" type="stream">
3 <!-- -->
4 <param name="contentType">application/x-download</param>
5 <param name="inputName">inputStream</param>
6 <param name="contentDisposition">attachment;filename="${fileName}"</param>
7 <param name="bufferSize">4096</param>
8 </result>
9 </action>
3.ブラウザの直接入力:http://localhost:8080/downloadActionアクセス、ダウンロードできます.