9

Struts2 を使用して、「1000 個のファイル」または「すべてのファイルを含む zip ファイル」を一度にアップロードする必要があります。(1000 ファイルまたは zip ファイルとは、すべてのファイルをシステムにアップロードする必要があることを意味します。ユーザーが 1000 ファイルすべてを一度に選択するか、それらを圧縮して単一のファイルとしてアップロードするかは関係ありません。実装がより簡単で効率的なもの)

次の回答を読みましたが、目的に合ったものはありません。

単純なリストファイルを使用する場合、次のコードを使用します。リストの名前が表示されますが、リストファイルを使用すると何も表示されず、ファイルをアップロードできません。

アップロード.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="upload" enctype="multipart/form-data" method="post">
            <input name="files" type="file" multiple/>
            <button type="submit"/>
        </form>
    </body>
</html>

アップロード.java

@Action
public class upload implements Addresses {

    private List <File> files = new ArrayList <File> ();

    public String execute(){

        return "success";
    }
    public upload() {
        System.out.println("in upload 1");

         for(int i=0;i<files.size();i++)
            System.out.println(i + ")" + files.get(i));

        System.out.println("in upload 2");
    }

    public List <File> getFiles() {
        return files;
    }

    public void setFiles(List <File> files) {
        this.files = files;
        for(int i=0;i<files.size();i++)
            System.out.println(i + ")" + files.get(i));
//            File fileToCreate = new File("c:\image", files.get(i).toString());
//            FileUtils.copyFile(files.get(i), fileToCreate);
    }
}

出力

in upload 1
in upload 2
4

2 に答える 2

9

プレーンな HTML タグの代わりに Struts タグを使用し、ActionSupport を拡張することをお勧めします ("result" のように、結果の文字列を手動で作成する代わりに、Result 定数を返します)。

とはいえ、これはテスト済みの実用的な例です。

注: 古いバージョンの IE では動作しませんが、あなた自身の質問で HTML5 を使用しているため、既にそれを知っており、古い IE を対象としていないに違いありません。


JSP

<%@page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Multiple File Upload Example</title>
    </head>
    <body>
        <s:form action="upload" enctype="multipart/form-data" >
            <s:file name="files" multiple="multiple" />
            <s:submit value="Upload files" />
        </s:form>
    </body>
</html>

部分に関する注意multiple="multiple": たとえ公式文書であっても、その<s:file />タグの属性は定義されていません。Struts 2.1 以降では、

許可される動的属性: true

これは、Struts による干渉なしに、そのままの状態で JSP に描画されることを意味します。このように、Struts は、HTML5 が新しい機能を提供するたびにタグを更新する必要がありません。動的属性 ( 、など)foo="bar"を許可するタグにも入れることができ、HTML で見つけることができます。<s:file /><s:textarea />

アクション

public class Upload extends ActionSupport{

    private List<File> files;
    private List<String> filesContentType;
    private List<String> filesFileName;

    /* GETTERS AND SETTERS */           

    public String execute() throws Exception{
        System.out.print("\n\n---------------------------------------");
        int i=0;
        for (File file : files){
            System.out.print("\nFile ["+i+"] ");
            System.out.print("; name:"         + filesFileName.get(i));
            System.out.print("; contentType: " + filesContentType.get(i));
            System.out.print("; length: "      + file.length());
            i++;
        }
        System.out.println("\n---------------------------------------\n");
        return SUCCESS;
    }

}

次に、ここで説明するように、Request最大サイズと各ファイルの最大サイズを設定することができます。

Struts.xml - マルチパートの最大サイズ:

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

Struts.xml - ファイルの最大サイズ (パッケージに対してグローバル、またはアクションに対してローカル)

<interceptor-ref name="fileUpload">
    <param name="maximumSize">10485760</param>
</interceptor-ref>
于 2013-06-20T11:51:22.730 に答える
0

JSP ファイル内:-

<form action="doUpload" enctype="multipart/form-data" method="post">
      <s:file name="fileUpload" multiple="multiple" label="Pick files" size="30"/>
      <br/>
      <s:submit value="Upload All" />
</form>

.java ファイル内

 private File fileUpload[];
 private String fileUploadFileName[];
 private String fileUploadContentType[];
 private String saveDirectory;

/** setter and getter for all above variables**/


public String doUpload1()throws Exception{
            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";
    }

これは私のために働いているものです。うまくいくことを願っています。何か問題があればお知らせください。

于 2016-11-02T08:44:30.837 に答える