plug-in Uploadify ne remet pas Java Servlet
Question
Je viens de commencer à utiliser le plugin flash Uploadify au lieu de l'interface utilisateur HTML standard.
Et rencontré le problème suivant:
lorsque je clique sur le lien « Ajouter des fichiers », que des progrès est montré et statut « liquidé » est apparu, mais en réalité - il n'a pas passé quoi que ce soit, Java Servlet n'est pas appelé de back-end
Il y a servlet de téléchargement et le téléchargement effectué façon suivante plus tôt :
< form enctype="multipart/form-data" method="post" target="uploadFrame"
action="<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}">...
Après avoir fourni le plugin Uploadify, interface utilisateur maintenant ressemble à:
une partie d'extension (configuration)
<script>
...
oScript.text+= "$j('#uploadify').uploadify({";
oScript.text+= "'uploader' : 'kne-portlets/js/lib/uploadify/scripts/uploadify.swf',";
oScript.text+= "'script' : '<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=<%= decodedString %>',";
oScript.text+= "'cancelImg': 'kne-portlets/js/lib/uploadify/cancel.png',";
oScript.text+= "'folder' : '<%= decodedString %>',";
oScript.text+= "'queueID' : 'fileQueue',";
oScript.text+= "'auto' : false,";
oScript.text+= "'multi' : false,";
//oScript.text+= "'sizeLimit' : 1000";
oScript.text+= "});";
oScript.text+= "});";
...
</script>
paramètre 'scripts de points ici pour Java Servlet sur backend
<%= decodedString %>
est le chemin du dossier, dont la valeur est \\ fichier srv \ demo
partie pour le téléchargement:
<input type="file" name="uploadify" id="uploadify" />
<a href="javascript:$j('#uploadify').uploadifyUpload();">Upload Files</a>
Où est ma faute?
param 'Script' dans le plugin points de configuration pour Java Servlet sur backend et il est fait, mais Servlet ne se déclenche pas.
erreur, quand param 'script' est pas correct: http: //img190.imageshack .us / i / errormm.png /
Nous vous remercions de l'aide.
La solution
Cela peut avoir beaucoup de causes possibles (voir aussi les commentaires que j'ai posté).
- externe JS n'est pas chargé.
- JS code est syntaxiquement / logiquement non valide.
- URL de demande est non valide.
- Servlet n'est pas du tout mis en correspondance.
- Servlet est mis en correspondance sur le mauvais
url-pattern
. - Servlet n'a pas pu démarrer / init.
Il est difficile de Naildown la cause racine sur la base des informations en ce donné.
Comme vous l'avez dit que vous ne voyez pas de demande avait été tiré dans l'onglet « Net » de Firebug, je pense que le code JS est tout simplement syntaxiquement / logiquement invalide. Page Rightclick et DoubleVerify code généré / imprimé JS.
Mise à jour: J'ai essayé de reproduire votre problème
.-
jquery.uploadify-v2.1.0 (MIT ) , extrait et mettre le contenu dans le dossier de mon
/WebContent/uploadify
(vide) projet web de jeux dans Eclipse. -
J'ai créé un fichier
/WebContent/upload.jsp
comme suit:<!DOCTYPE html> <html lang="en"> <head> <title>Uploadify test</title> <script src="uploadify/jquery-1.3.2.min.js"></script> <script src="uploadify/swfobject.js"></script> <script src="uploadify/jquery.uploadify.v2.1.0.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#uploadify').uploadify({ 'uploader': 'uploadify/uploadify.swf', 'script': 'uploadServlet', 'folder': '/uploads', 'cancelImg': 'uploadify/cancel.png' }); $('#upload').click(function() { $('#uploadify').uploadifyUpload(); return false; }); }); </script> </head> <body> <input id="uploadify" type="file"> <a id="upload" href="#">Upload</a> </body> </html>
-
J'ai créé un
com.example.UploadServlet
comme suit avec peu d'aide de Apache Commons FileUpload (juste placé < a href = "http://mirrors.kahuki.com/apache/commons/fileupload/binaries/commons-fileupload-1.2.1-bin.zip" rel = "noreferrer">commons-fileupload-1.2.1.jar
etcommons-io-1.4.jar
dans/WEB-INF/lib
):package com.example; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("UploadServlet invoked. Here are all uploaded files: "); try { List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { System.out.println("Name: " + item.getName()); System.out.println("Size: " + item.getSize()); System.out.println("Type: " + item.getContentType()); } } } catch (Exception e) { throw new ServletException(e); } } }
-
Je me suis inscrit dans
com.example.UploadServlet
web.xml
comme suit:<servlet> <servlet-name>uploadServlet</servlet-name> <servlet-class>com.example.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>uploadServlet</servlet-name> <url-pattern>/uploadServlet</url-pattern> </servlet-mapping>
-
Je le projet déployé, a commencé le serveur, est allé à http: // localhost: 8080 / aire de jeux / upload.jsp , sélectionnez un fichier grand hasard dans mon dossier téléchargements, cliqué sur le lien
Upload
, voir le compteur de pourcentage de téléchargement de plus en plus à 100% et je vois enfin ce qui suit dans le stdout:UploadServlet invoked. Here are all uploaded files: Name: glassfish-v3-windows.exe Size: 50402555 Type: application/octet-stream
Je suis désolé de le dire, je ne peux pas reproduire votre problème. Au moins, les informations ci-dessus devrait vous aider à démarrer « fraîchement ». Espérons que cela aide.
Mise à jour: selon les commentaires, le filtre s'attend à ce qu'il utilise la même session. Ok, vous pouvez le faire assez facilement en changeant
'<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=<%= decodedString %>',";
à
'<%= request.getContextPath() %>/uploadFile;jsessionid=${pageContext.session.id}?portletId=${portletId}&remoteFolder=<%= decodedString %>',";
Autres conseils
J'avais exactement le même problème avec Uploadify 2.1.4. J'ai joué avec ce assez longtemps pour comprendre qu'il semble être un problème avec un chemin URI imbriqué, i.e. /folder1/folder2/folder3, etc.
Dès que je l'ai changé mon chemin pour utiliser le chemin de base (juste / folder1 ou / UploadServlet comme @BalusC utilisait) le fichier SWF a commencé à envoyer des données à mon servlet.