ser*_*nni 11 java jquery jsp servlets uploadify
我刚开始使用Uploadify flash插件而不是标准的HTML UI.
并遇到了下一个问题:
当我点击"上传文件"链接时,会显示该进度并显示"已完成"状态,但实际上 - 它没有发生任何事情,Java Servlet不会从后端调用.
有上传的servlet和上传进行下一方式早些时候:
< form enctype="multipart/form-data" method="post" target="uploadFrame"
action="<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}">...
Run Code Online (Sandbox Code Playgroud)
提供Uploadify插件后,UI 现在看起来像:
插件部分(配置):
<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>
Run Code Online (Sandbox Code Playgroud)
'scripts'参数在这里指向后端的Java Servlet
<%= decodedString %>是文件夹路径,其值为\\ file-srv\demo
上传部分:
<input type="file" name="uploadify" id="uploadify" />
<a href="javascript:$j('#uploadify').uploadifyUpload();">Upload Files</a>
Run Code Online (Sandbox Code Playgroud)
我的错在哪里?
插件配置中的"脚本"参数指向后端的Java Servlet并且已完成,但Servlet未被触发.
错误,当'script'参数不正确时:http://img190.imageshack.us/i/errormm.png/
谢谢你的帮助.
Bal*_*usC 21
这可能有很多可能的原因(另见我发布的评论).
url-pattern.基于迄今给定的信息,很难根除原因.
正如您所提到的,您没有在FireBug的"Net"选项卡中看到任何请求被触发,我认为JS代码在语法上/逻辑上都是无效的.右键单击页面并双重生成/打印JS代码.
更新:我试图重现你的问题.
我下载了jquery.uploadify-v2.1.0(MIT),将其解压缩并将整个内容/WebContent/uploadify放在Eclipse中我的(空)playground web项目的文件夹中.
我创建了一个/WebContent/upload.jsp文件如下:
<!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>
Run Code Online (Sandbox Code Playgroud)我在Apache Commons FileUpload的com.example.UploadServlet帮助下创建了一个如下所示(只是放置并放入):commons-fileupload-1.2.1.jarcommons-io-1.4.jar/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);
}
}
}
Run Code Online (Sandbox Code Playgroud)我注册com.example.UploadServlet的web.xml,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)我部署了项目,启动了服务器,转到http:// localhost:8080/playground/upload.jsp,从我的下载文件夹中选择一个随机大文件,点击Upload链接,看到上传百分比计数器增长到100%我最后在stdout中看到以下内容:
UploadServlet invoked. Here are all uploaded files: Name: glassfish-v3-windows.exe Size: 50402555 Type: application/octet-stream
我很遗憾地说,我无法重现你的问题.至少,上述信息应该可以帮助您"新鲜"地开始.希望能帮助到你.
更新:根据评论,过滤器期望它使用相同的会话.好的,你可以通过改变来做到这一点
'<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=<%= decodedString %>',";
Run Code Online (Sandbox Code Playgroud)
至
'<%= request.getContextPath() %>/uploadFile;jsessionid=${pageContext.session.id}?portletId=${portletId}&remoteFolder=<%= decodedString %>',";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11185 次 |
| 最近记录: |