2012-03-22 55 views
3

単一のStruts 2ファイルタグを使用して複数のファイルをアップロードしたいとします。複数のファイルStruts 2の単一ファイルタグを使用してアップロード

Gmailと同様に、複数のファイルを選択するには、CTRLキーを使用して複数のファイルを添付します。

複数のファイルをアップロードする方法は分かっていますが、1つのファイルタグを使用したいと思います。

+0

S2単一のタグを使用してこのような機能を提供していませんが、あなたはその –

+0

がこの質問を参照してくださいhttp://stackoverflow.com/questions/8322499/struts2-file-upload –

+0

のためのjQueryや他のものを使用することができますちょっと@UmeshAwasthi ..あなたは上記の例のストラット2のマッピングで助けてもらえますか? –

答えて

1

小さなギャラリーアプリケーションで複数のファイルをアップロードします。

<s:form namespace="/gallery" action="image-upload" method="POST" enctype="multipart/form-data"> 
    <s:file name="image" multiple="multiple"/> 
    <s:submit/> 
</s:form> 
:あなたのアクションは、すでに複数のファイルを受信するように設定されている場合、それは(警告これはIEを除くほぼすべての主要なブラウザで動作しますので、あなたはjQueryのか、このためのフラッシュベースのソリューションが必要になります)と同じくらい簡単です

あなたはおそらく既に(1つのファイルについて)最大ファイルサイズを設定するパラメータを見てきました。私が正しく覚えていれば、これはデフォルトで2MBですが、最大ファイルサイズの最大値すべてのファイルがまとめられます)。

<constant name="struts.multipart.maxSize" value="20000000" /> 

編集:ユーザーは、この後の値を大きく画像の優れたコレクションをアップロードできる場合(struts.xmlで)約20 MBにこの値を設定するために、非常に便利です興味のために、HTML上記からであるレンダリング...

<form id="image-upload" name="image-upload" action="/PhotoGallery/gallery/image-upload.action" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="image" value="" id="image-upload_image" multiple="multiple"/> 
    <input type="submit" id="image-upload_0" value="Submit"/> 
</form> 

UPDATE 2014年2月(ほぼ2年後): 複数の属性は、現在のInternet Explorer 10は、Firefox、オペラ、クロム、およびSafariでサポートされています。

Internet Explorer 9以前のバージョンではサポートされていませんでした。

+0

ファイルのパラメータとして 'multiple'を見たことはありません。本当に面白いものとして言及されているdocに私をリンクさせることができます –

+0

ファイルタグの複数の属性を見たことはありません –

+0

+1。 @UmeshAwasthi:[ここに記載されている](http://stackoverflow.com/questions/16393581/need-to-upload-multiple-files-at-once/17212916#17212916)、Strutsの ''要素は動的属性を許可します。これは既存の(またはそうでない)あらゆる種類の属性を入れることができ、StrutsによるチェックなしでJSPでレンダリングされることを意味します。 –

1

次のプログラム例は、Struts2フレームワークで複数のファイルをアップロードする機能を実装する方法を示しています。アプリケーションはアップロードフォームを表示します。アップロードフォームを使用すると、3つのファイルをまとめてアップロードできます。 アップロードされたファイルは、アプリケーションのstruts.xmlファイルで設定された場所にコピーされます。

サンプルアプリケーションがどのようにコード化されているかを見てみましょう。次のように アップロードフォームは、にUpload.jspページに実装されています。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!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=ISO-8859-1"> 
<title>Multiple Files Upload with Struts2</title> 
</head> 
<body> 
    <center> 
     <h2>Pick multiple files to upload</h2> 
     <s:form action="uploadFile" enctype="multipart/form-data" method="post"> 
      <s:file name="fileUpload" multiple="multiple" label="Pick files" size="30"/> 
      <br/> 
      <s:submit value="Upload All" /> 
     </s:form> 
    </center> 
</body> 
</html> 

次のようにMultipleFilesUploadAction.javaファイル内のStruts2ののアクションクラスを実装します。

import java.io.File; 
import java.io.IOException; 

import org.apache.commons.io.FileUtils; 

public class MultipleFilesUploadAction { 
    private File[] fileUpload; 
    private String[] fileUploadFileName; 
    private String[] fileUploadContentType; 

    /** 
    * This is the path to save uploaded file, which is configured in struts.xml 
    */ 
    private String saveDirectory; 

    public String doUpload() { 

     // copy the uploaded files into pre-configured location 
     for (int i = 0; i < fileUpload.length; i++) { 
      File uploadedFile = fileUpload[i]; 
      String fileName = fileUploadFileName[i]; 
      File destFile = new File(saveDirectory + File.separator + fileName); 
      try { 
       FileUtils.copyFile(uploadedFile, destFile); 
      } catch (IOException ex) { 
       System.out.println("Could not copy file " + fileName); 
       ex.printStackTrace(); 
      } 
     } 

     return "success"; 
    } 

    public File[] getFileUpload() { 
     return fileUpload; 
    } 

    public void setFileUpload(File[] fileUploads) { 
     this.fileUpload = fileUploads; 
    } 

    public String[] getFileUploadFileName() { 
     return fileUploadFileName; 
    } 

    public void setFileUploadFileName(String[] fileUploadFileNames) { 
     this.fileUploadFileName = fileUploadFileNames; 
    } 

    public String[] getFileUploadContentType() { 
     return fileUploadContentType; 
    } 

    public void setFileUploadContentType(String[] fileUploadContentTypes) { 
     this.fileUploadContentType = fileUploadContentTypes; 
    } 

    public String getSaveDirectory() { 
     return saveDirectory; 
    } 

    public void setSaveDirectory(String saveDir) { 
     this.saveDirectory = saveDir; 
    } 
} 

をこのPOJOアクションクラスでアップロードされたファイルを格納するために3つの配列を使用します:

private File[] fileUpload; 
private String[] fileUploadFileName; 
private String[] fileUploadContentType; 
  • fileUpload」という語句が、upload.jspファイルの 属性の<s:file>タグの値と一致することに注意してください。 fileUploadと呼ばれるStruts2の インターセプタは、セッターを介してこれらの変数 のデータをフェッチします。
  • 変数saveDirectoryの値は、対応する セッターによってStruts2のstaticParamsインターセプタによって設定され、この値はstruts.xmlファイルで に設定できます。
  • アクションクラスの入力方法doUpload()コピーし、一時ディレクトリからアップロードされたファイル saveDirectory変数で指定された場所には、その後、 結果ページで 『成功』ビューにリダイレクトします。

結果ページはresult.jsp - 成功のメッセージが表示され、非常に単純です:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!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=ISO-8859-1"> 
<title>Upload result</title> 
</head> 
<body> 
    <center> 
     <h2>The files were uploaded successfully</h2> 
    </center> 
</body> 
</html> 

我々は、アプリケーションのストラットを通じてアップロードフォームページ、アクションクラスと結果ページを接続します次のようにファイルを.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.multipart.maxSize" value="20971520" /> <!-- 20MB --> 

    <package name="fileUpload" extends="struts-default"> 

     <action name="uploadFile" class="com.example.struts.MultipleFilesUploadAction" 
      method="doUpload"> 

      <param name="saveDirectory">E:/Test/Upload</param> 

      <interceptor-ref name="fileUpload"> 
       <param name="allowedTypes">*/*</param> 
       <param name="maximumSize">4194304</param> <!-- 4MB --> 
      </interceptor-ref> 

      <interceptor-ref name="staticParams"/> 
      <interceptor-ref name="params" /> 
      <interceptor-ref name="validation" /> 
      <interceptor-ref name="workflow" /> 

      <result name="success" type="redirect">/result.jsp</result> 
      <result name="input">/upload.jsp</result> 
     </action> 
    </package> 

</struts> 
ここ
  • 、int型erceptor fileUploadはすべてのファイルを許可するように設定されています タイプはアップロードでき、個々のファイルの最大サイズは 4MBです。
  • 定数struts.multipart.maxSizeは、最大許容サイズを制限します。マルチパートリクエストの場合、 は20MBです。つまり、アップロードファイルの合計サイズは、 ファイルは20MBを超えることはできません。それ自体が
+0

公式ガイドと基本的に同じ - https://cwiki.apache.org/confluence/display/WW/File + Upload#FileUpload-Uploading複数のファイルをアップロードします。 –

関連する問題