2016-11-14 7 views
1

J'ai le scénario que, je veux télécharger plusieurs fichiers, Dans quel utilisateur peut ou non télécharger des fichiers, Et je veux maintenir Index à quelle position l'utilisateur a téléchargé le fichier et que vous souhaitez enregistrer le fichier avec cet index comme nomTélécharger plusieurs fichiers avec le maintien Index (position à laquelle le fichier a été téléchargé) dans Struts2

j'ai parlé https://stackoverflow.com/a/17050230/3425489, Dans mon cas, je ne veux pas créer de nouvelle classe, donc pas mentionné solution acceptée

jusqu'à présent Dans mon action Classe J'ai

File upload []; 
String uploadContentType [] 
String uploadFileName [] 

accesseurs

Dans mon jsp j'ai essayé

<input type="file" name="upload"> 

mais je suis en mesure d'obtenir les fichiers téléchargés uniquement ne sont pas capables de maintenir l'indice

aussi essayé

<input type="file" name="upload[0]"> 
<input type="file" name="upload[1]"> 
<input type="file" name="upload[2]"> 

avec ce cas, je ' m pas en mesure de setProperties dans ma classe d'action

---- ---- Mise à jour

Vous pouvez consulter mon ModèleStruts 2 : Unable to access Model properties in JSP

Pour tous vos ProcessSolutionStep, je veux maintenir, quel fichier est téléchargé pour l'étape particulière,

l'utilisateur peut télécharger le fichier pour étape 1 et étape 5, en sautant les étapes intermédiaires et en vue.

Je veux afficher le fichier téléchargé pour l'étape particulière

Répondre

1

Voilà comment je résolu mon Prob LEM:

<tr> 
    <td> Step 1 : 
    <td> 
     <input type="hidden" name="isFileUpload" id="id-is-file-upload-0" value="0"> 
     <textarea id="id-solution-0" name="processSolutionSteps" rows="2" cols="50" maxlength="200" class="class-text-area class-text-area-not-blank"></textarea> 
     <!-- <input type="text" id="id-solution-0" name="processSolution" maxlength="30" size="35"> --> 
     <p id="id-process-solution-counter-0"></p> 
    </td> 
    <td> 
     <input type="file" id="id-file-0" name="uploads"> 
    </td> 
</tr> 
<tr> 
    <td> Step 2 : 
    <td> 
     <input type="hidden" name="isFileUpload" id="id-is-file-upload-1" value="0"> 
     <textarea id="id-solution-1" name="processSolutionSteps" rows="2" cols="50" maxlength="200" class="class-text-area class-text-area-not-blank"></textarea> 
     <!-- <input type="text" id="id-solution-1" name="processSolution" size="35"> --> 
     <p id="id-process-solution-counter-1"></p> 
    </td> 
    <td> 
     <input type="file" id="id-file-1" name="uploads"> 
    </td> 
</tr> 
<tr> 
    <td> Step 3 : 
    <td> 
     <input type="hidden" name="isFileUpload" id="id-is-file-upload-2" value="0"> 
     <textarea id="id-solution-2" name="processSolutionSteps" rows="2" cols="50" maxlength="200" class="class-text-area class-text-area-not-blank"></textarea> 
     <!-- <input type="text" id="id-solution-2" name="processSolution" size="35"> --> 
     <p id="id-process-solution-counter-2"></p> 
    </td> 
    <td> 
     <input type="file" id="id-file-2" name="uploads"> 
    </td> 
</tr> 

Je viens de poster quelques exemples de code de mon <tr> tag

J'ai maintenu un champ caché isFileUpload avec la valeur inital , autant pas.de mon <input type="file">, Après avoir téléchargé le fichier, sur son événement changement j'ai changé la valeur de isFileUpload à comme

$('#id-solution-table').on('change', 'input[type=file]', function() { 
    $('#id-is-file-upload-'+$(this).prop("id").split("-")[2]).val(1); 
}); 

Et dans ma classe d'action Je le code

En fonction des valeurs de isFileUpload ie je l'ai vérifié avec ,

signifie que j'ai uploded fichier à thi s position d'index et cartographiées avec tableau de fichier téléchargé qui est uploads

private File [] uploads; 
private String [] uploadsFileName; 
private String [] uploadsContentType; 
private short isFileUpload []; 

try { 
    int fileIndex = 0; 
    for (int i = 0; i < this.isFileUpload.length; i++) { 
     if(this.isFileUpload[i] == 1) { 
      System.out.println(" index "+i+ " isFileUpload "+this.isFileUpload[i]); 
      System.out.println("Index  "+i+ "  "+this.uploadsFileName[ fileIndex ]); 
      String filePath = path; 
      new File(filePath).mkdirs(); 
      FileUtils.copyFile(this.uploads[ fileIndex ], new File(filePath+"/"+i+"."+FilenameUtils.getExtension(this.uploadsFileName[ fileIndex ]))); 
      ++fileIndex; 
     } 
    } 
} catch(Exception exception) { 
    addActionError("Some files not uploaded."); 
    exception.printStackTrace(); 
} 
+0

les champs cachés sont bons, ils peuvent utiliser indexé noms de propriété;) –

1

Pas besoin de créer une nouvelle classe (qui est une façon, si vous préférez encapsuler chaque objet singulièrement), il suffit d'utiliser List s:

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; 
    } 

} 

Utilisez l'attribut multiple et ne pas oublier le droit enctype:

<s:form action="upload" enctype="multipart/form-data" > 
    <s:file name="files" multiple="multiple" /> 
    <s:submit value="Upload files" /> 
</s:form> 
+0

merci pour la réponse, mais je ne veux pas sélectionner les fichiers à la fois, je veux sélection par étapes, plz vérifier la mise à jour –

+0

un plus essayer I peut faire est que, je fais un tableau de champ caché, et définir sa vallée à ** 0 ** ou ** 1 **, en particulier ** Étape ** dépendent du téléchargement de fichier ou non, vérifier sa valeur à mon action et faire traiter les fichiers téléchargés ainsi ... plz me suggérer –

+0

Donc juste faire '' '' '< input type = "fichier" name = "upload"> '. Est-ce que ça fonctionne comme ça? L'index n'est-il pas conservé par la liste? –