Uploadify plugin doesn't call Java Servlet
i just started using Uploadify flash plugin instead of standard HTML UI.
And met the next problem:
when I click "Upload Files" link,that progress is shown and "completed" status is appeared, but in reality - it didn't happened anything,Java Servlet isn't called from backend.
There is upload servlet and uploading performed next way earlier:
< form enctype="multipart/form-data" method="post" target="uploadFrame"
action="<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}">...
After providing Uploadify plugin, UI now looks like:
plugin part(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>
'scripts' parameter here points to Java Servlet on backend
<%= decodedString %>
is folder path, which value is \\file-srv\demo
part for uploading:
<input type="file" name="uploadify" id="uploadify" />
<a href="javascript:$j('#uploadify').uploadifyUpload();">Upload Files</a>
Where is my fault?
'Script' param in plugin config points to Java Servlet on backend and it's done,but Servlet isn't triggered.
error, when 'script' param isn't correct:http://img190.imageshack.us/i/errormm.png/
Thank you for assistance.
This can have a lot of possible causes (also see the comments I posted).
- External JS is not loaded.
- JS code is syntactically/logically invalid.
- Request URL is invalid.
- Servlet is not mapped at all.
- Servlet is mapped on wrong
url-pattern
. - Servlet failed to start/init.
It's hard to naildown the root cause based on the as far given information.
As you mentioned that you didn't see any request been fired in the "Net" tab of FireBug, I think that the JS code is simply syntactically/logically invalid. Rightclick page and doubleverify generated/printed JS code.
Update: I tried to reproduce your problem.
I downloaded jquery.uploadify-v2.1.0 (MIT), extracted it and put the entire contents in the
/WebContent/uploadify
folder of my (empty) playground web project in Eclipse.-
I created a
/WebContent/upload.jsp
file as follows:<!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>
-
I created a
com.example.UploadServlet
as follows with little help of Apache Commons FileUpload (just placedcommons-fileupload-1.2.1.jar
andcommons-io-1.4.jar
in/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); } } }
-
I registered
com.example.UploadServlet
inweb.xml
as follows:<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>
-
I deployed the project, started the server, went to http://localhost:8080/playground/upload.jsp, selected a random big file from my downloads folder, clicked the
Upload
link, see the upload percentage counter growing to 100% and I finally see the following in the stdout:UploadServlet invoked. Here are all uploaded files: Name: glassfish-v3-windows.exe Size: 50402555 Type: application/octet-stream
I'm sorry to say, I can't reproduce your problem. At least, the above information should help you to get started "freshly". Hope it helps.
Update: as per the comments, the filter expects that it is using the same session. Ok, you can do this fairly easy by changing
'<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=<%= decodedString %>',";
to
'<%= request.getContextPath() %>/uploadFile;jsessionid=${pageContext.session.id}?portletId=${portletId}&remoteFolder=<%= decodedString %>',";