2010-03-07 3 views
0

Je suis en train de télécharger un fichier en utilisant commons-fileupload-1.1.1.jar fichier (je sais que ce n'est pas la dernière version, mais il est livré avec struts 1.3.10 donc j'utilise le même).Java - Commons-fileupload.jar - Problème

Maintenant, le problème est quand je parser le request (HttpServletRequest) pour obtenir un List de FileItem s, je reçois une liste vide.

 DiskFileItemFactory factory = new DiskFileItemFactory(); 

     File tempDir = new File("/fileUploadDirectory"); 
     tempDir.mkdir(); 

     // Set factory constraints 
     factory.setSizeThreshold(10000); 
     factory.setRepository(tempDir); 

     // Create a new file upload handler 
     ServletFileUpload upload = new ServletFileUpload(factory); 

     // Set overall request size constraint 
     upload.setSizeMax(10000); 

     // Parse the request 
     List items = upload.parseRequest(request); 
     System.out.println(items); 

     System.out.println(request.getContentLength()); 

     // Process the uploaded items 
     Iterator<FileItem> iter = items.iterator(); 
     while (iter.hasNext()) { 
      FileItem item = iter.next(); 
      if (item.isFormField()) { 
       System.out.println("File is a FormField"); 
      } else { 
       System.out.println("File is a File"); 
      } 
     } 

Q1. Pourquoi je reçois une liste vide? Lorsque j'imprime la taille de la requête par request.getContentLength() (comme indiqué ci-dessus dans le code), j'obtiens des données numériques (1536) qui, selon moi, indiquent la longueur du fichier. Si elle montre la longueur du fichier, alors pourquoi je ne reçois pas la liste de FileItem s?

Note: Je l'utilise avec Struts 1.3.10 avec ActionForm. Est crée un problème.

Remarque: Je ne reçois également aucune exception lors de l'analyse de la demande.

Répondre

3

Si la liste est vide, la demande a été très probablement pas envoyer comme multipart/form-data. Assurez-vous que la méthode de requête est définie sur post et ce type de codage est réglé sur multipart/form-data:

<form method="post" enctype="multipart/form-data"> 

(remplacer simplement l'élément HTML <form> avec l'équivalent Struts, qui est susceptible <html:form>)

Cela dit, pourquoi n'utilisez-vous pas le composant de téléchargement de fichier intégré Struts? Googling m'apprend qu'il y a un composant <html:file> qui doit être lié avec une propriété org.apache.struts.upload.FormFile.

+0

j'utilisais aussi bien 'multipart/form-data' et' post'. J'ai également essayé le composant de téléchargement de fichier intégré Struts. Cela n'a pas fonctionné car j'utilisais la balise ''

'' du HTML. Quand j'ai essayé '' , le problème résolu ... Je ne sais pas pourquoi 'struts' ne supporte pas les' ' .. il est étrange ... mais merci quand même ... –

+1

Ce n'est pas étrange. Si vous n'utilisez pas les composants fournis par le framework, il ne sera pas en mesure d'associer correctement la requête à une action et un modèle spécifiques. – BalusC