- 浏览: 126775 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ArtShell:
没试过,就不要贴出来!误导别人
如何在Servlet或Action中获取PageContext -
wyxy2005:
ie下,$("#waiguan_add") ...
iframe实现图片异步上传 -
xiaopei0714:
可是我提取出的文本包含一堆的问号,可以设置编码吗?
HtmlParser提取网页中的纯文本信息 -
icylee:
我这样做在action里不行啊 总是提示action里没有ge ...
如何在Servlet或Action中获取PageContext -
it_weigang:
请教问题,如果是ajax的页面,信息如何抓取呢?例如 http ...
HtmlParser提取网页中的纯文本信息
实现主要功能:
JSP页面编写如下:
让form的target值为iframe,当form提交的时候,是异步iframe进行提交,不会影响页面的其他部分。
c:forEach部分是首先隐藏了上传后显示的图片标签和删除标签(这里最大可以上传三张)
相应的JS代码:采用的是JQuery写的,不过写的很啰嗦,有点像是原始JS操作
上传图片采用的是定义的form的submit()提交,iframe的异步提交。
返回操作将image的src的值,置为刚upload的图片在webroot中的位置,这样就能显示图片了。
删除图片时,利用Ajax将要删除的图片路径发送到后台,进行删除,删除成功时,将页面html中image的src值置为空。
后台处理的方法如下:
这样,便完成了要实现的功能。
有人专门写过仿163网盘无刷新文件上传的,那个很详细,而且不依赖于库。
没有搜索到,倒是挺想看看的。
无刷新上传:主要的问题都是出在前台的操作上,后台接收文件相对来说要好解决些的。
依赖库也主要是后台的操作。
仿163网盘无刷新文件上传确实有,你好好上网查查,写这篇文章的作者也写了很多其他的ajax方面的文章,从中获益良多,而且注释也很详细,上次我有了问题还向他请教了。
有人专门写过仿163网盘无刷新文件上传的,那个很详细,而且不依赖于库。
没有搜索到,倒是挺想看看的。
无刷新上传:主要的问题都是出在前台的操作上,后台接收文件相对来说要好解决些的。
依赖库也主要是后台的操作。
- 页面提供一个上传图片的input file选择框,用于上传某一类型的数张图片
- 每次选择完本地图片后,图片便异步存储到后台的文件夹中;
- 并将路径信息存储到数据库中;
- 页面上显示此图的缩略图,并在旁边显示一个删除标记,当点击时,将此图片从页面、数据库、后台的文件夹中删除
- input file选择框清空,再点击用于上传下一张图片;
JSP页面编写如下:
<div> <form action="uploadWaiguanImage.do" id="waiguan_form" name="waiguan_form" enctype="multipart/form-data" method="post" target="waiguan_hidden_frame"> <span> <label>外观图</label> <img src="images/addImage.JPG"> <input type="file" id="waiguan_add" name="waiguan_add"/> </span> <iframe name="waiguan_hidden_frame" id="waiguan_hidden_frame" style="display:none"></iframe> <c:forEach var="x" begin="1" end="3" step="1"> <span> <img id="waiguan_image${x }" style="visibility:hidden" src="" width="100" alt="外观图${x }"/> <img id="waiguan_delete_image${x }" style="visibility:hidden;cursor: pointer" src="images/deleteImage.JPG"/> </span> </c:forEach> </form> </div>
让form的target值为iframe,当form提交的时候,是异步iframe进行提交,不会影响页面的其他部分。
c:forEach部分是首先隐藏了上传后显示的图片标签和删除标签(这里最大可以上传三张)
相应的JS代码:采用的是JQuery写的,不过写的很啰嗦,有点像是原始JS操作
/** * 页面加载时完成操作 */ $(document).ready(function() { // 设置上传外观图 $("#waiguan_add").bind("change", function() { submitImage("waiguan", 3); }); } /** * 上传图片 * * @param {} * para_name 图片所属属性名 * @param {} * number 此类图片的总数量 */ function submitImage(para_name, number) { var para_form = para_name + "_form"; var para_image = para_name + "_image"; // alert(para_image); for (var i = 1; i <= number; i++) { var srcValue = $("#" + para_image + i).attr("src"); // alert(srcValue); // alert(srcValue.length); if (srcValue == "" || srcValue.length == 0) { // alert("break"); break; } } if (i > number) { alert("已超过了此类图的上传最大限"); // 重置上传按钮,使之为空 resetUploadBotton(para_name + "_add"); } else { $("#" + para_form).submit(); } } /** * iframe上传外观图片的返回操作 * * @param {} * msg 返回的图片所在地址 */ function callbackWaiguan(msg) { if (msg != "error") { for (var i = 1; i <= 3; i++) { var srcValue = $("#waiguan_image" + i).attr("src"); // alert(srcValue); if (srcValue == "" || srcValue.length == 0) { $("#waiguan_image" + i).attr("src", msg); $("#waiguan_image" + i).css("visibility", "visible"); $("#waiguan_delete_image" + i).css("visibility", "visible"); $("#waiguan_delete_image" + i).click(function() { deleteImage("waiguan", i); }); break; } } } else { alert("上传图片失败,后台程序出现问题!"); } // 重置上传按钮,使之为空 resetUploadBotton("waiguan_add"); } /** * 删除某个图片时的异步操作 * * @param {} * para_name * @param {} * number */ function deleteImage(para_name, number) { var delete_image_id = para_name + "_image" + number; var imagePathName = $("#" + delete_image_id).attr("src"); if (para_name == "waiguan") { $.get("deleteWaiguanImage.do", { deleteFile : imagePathName, t : Math.random() }, function(tag) { alert(tag); if (tag == "true") { $("#" + delete_image_id).attr("src", ""); $("#" + delete_image_id).css("visibility", "hidden"); $("#" + para_name + "_delete_image" + number).css("visibility", "hidden"); } else { alert("连接数据库失败,无法删除该图片!"); } }); } } /** * 重置上传按钮,使之为空 * * @param {} * para_name_add */ function resetUploadBotton(para_name_add) { var form = document.createElement("form"); var span = document.createElement("span"); var para_image_file = document.getElementById(para_name_add); para_image_file.parentNode.insertBefore(span, para_image_file); form.appendChild(para_image_file); form.reset(); span.parentNode.insertBefore(para_image_file, span); span.parentNode.removeChild(span); form.parentNode.removeChild(form); }
上传图片采用的是定义的form的submit()提交,iframe的异步提交。
返回操作将image的src的值,置为刚upload的图片在webroot中的位置,这样就能显示图片了。
删除图片时,利用Ajax将要删除的图片路径发送到后台,进行删除,删除成功时,将页面html中image的src值置为空。
后台处理的方法如下:
/** * 初始化SmartUpload类,用于上传文件 * * @param servlet * @return SmartUpload * @throws ServletException * @throws IOException * @throws SQLException */ public SmartUpload initSmartUpload(ActionServlet servlet) throws ServletException, IOException, SQLException { // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); javax.servlet.jsp.PageContext pageContext = JspFactory .getDefaultFactory().getPageContext(servlet, request, response, null, true, 8192, true); // 上传初始化 su.initialize(pageContext); // 设定上传限制 // 1.限制每个上传文件的最大长度。 su.setMaxFileSize(10000000); // 2.限制总上传数据的长度。 su.setTotalMaxFileSize(20000000); // 3.设定允许上传的文件 su.setAllowedFilesList("jpg,gif,bmp,pcx," + "tiff,jpeg,tga,exif,fpx,cad"); // 4.设定禁止上传的文件 su.setDeniedFilesList("exe,bat,jsp,htm,html"); return su; } /** * 异步上传外观图 * * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward uploadWaiguanImage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { SeriesService seriesService = ServiceFactory.getSeriesService(request, response); String filePathName = null; boolean tag= true; try { //初始化SmartUpload对象 SmartUpload su = seriesService.initSmartUpload(this.getServlet()); //上传外观图,将文件存储在filePath中,遍历系列对象的外观图属性,将图片的位置存储在某一空的属性中 filePathName = "upload/" + seriesService.addWaiguanImage(su); } catch (Exception e) { e.printStackTrace(); tag = false; } PrintWriter out = response.getWriter(); if (tag == true) { out.println("<script>parent.callbackWaiguan('" + filePathName + "')</script>"); } else { out.println("<script>parent.callbackWaiguan('error')</script>"); } return null; } /** * 异步删除某个外观图 * * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward deleteWaiguanImage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Integer seriesID = (Integer) request.getSession().getAttribute( "seriesID"); String filePathName = (String) request.getParameter("deleteFile"); SeriesService seriesService = ServiceFactory.getSeriesService(request, response); boolean tag = true; try { //从数据库中和文件路径中删除外观图 tag = seriesService.deleteWaiguanImage(filePathName, seriesID); } catch (Exception e) { e.printStackTrace(); tag = false; } PrintWriter out = response.getWriter(); out.write(new Boolean(tag).toString()); return null; }
这样,便完成了要实现的功能。
评论
10 楼
wyxy2005
2011-11-22
ie下,$("#waiguan_add").bind("change" 这个的事件出发需要点from之外点击之后才开始上传。火狐是可以正常执行的,不理解为什么出现这个情况
9 楼
zjiaohuang
2010-01-21
这里有一个用FancyUpload实现的demo,个人认为FancyUpload实现的上传简单实用。API同时也是十分详细
8 楼
sunrisetg
2010-01-20
楼主能把 该实验的源码 上传看看吗?
7 楼
makemyownlife
2009-11-06
wnzz95391511 写道
Army 写道
有人专门写过仿163网盘无刷新文件上传的,那个很详细,而且不依赖于库。
没有搜索到,倒是挺想看看的。
无刷新上传:主要的问题都是出在前台的操作上,后台接收文件相对来说要好解决些的。
依赖库也主要是后台的操作。
仿163网盘无刷新文件上传确实有,你好好上网查查,写这篇文章的作者也写了很多其他的ajax方面的文章,从中获益良多,而且注释也很详细,上次我有了问题还向他请教了。
6 楼
willko
2009-11-05
swfupload挺好的。
还能跨域
还能跨域
5 楼
liwenshui322
2009-11-05
看不懂
4 楼
wnzz95391511
2009-06-02
Army 写道
有人专门写过仿163网盘无刷新文件上传的,那个很详细,而且不依赖于库。
没有搜索到,倒是挺想看看的。
无刷新上传:主要的问题都是出在前台的操作上,后台接收文件相对来说要好解决些的。
依赖库也主要是后台的操作。
3 楼
Army
2009-06-02
有人专门写过仿163网盘无刷新文件上传的,那个很详细,而且不依赖于库。
2 楼
zgz888
2009-06-02
好东西,谢谢了
1 楼
langhua9527
2009-05-27
好东东,收藏一下,需的时候来看。。。我原来在一个项目里都准备做异步上传的,结果时间关系,就同步了。。。。
发表评论
-
使用Hibernate时,出现java.lang.UnsupportedOperationException: Update queries only supp
2010-12-19 22:56 2759使用Hibernate时,出现java.lang.Unsupp ... -
如何在Servlet或Action中获取PageContext
2009-05-21 20:32 5499如何在Servlet或Action中获取JSP的内置对象Pag ... -
EL、JSTL的基本使用方法
2009-05-19 20:53 2099一、EL表达式: * 表示隐式对象 *存取器 ... -
Eclipse中include 标签使用出现的问题
2009-05-19 10:33 2054在MyEclipse中使用<%@ inc ... -
JQuery基本操作笔记
2009-05-17 21:44 1369获取select框中的已选值 $("#"+ ... -
JQuery实现IE浏览器上不支持的option disable选项
2009-05-17 21:34 2878可怜的IE,不支持select 中option的disable ... -
The type java.lang.Object cannot be resolved.问题
2009-05-06 18:26 2384不知道怎么回事,Eclipse中我的项目中的一个java文件报 ... -
Hibernate实践
2009-05-04 10:52 1036感觉这篇写Hibernate的文 ... -
itext生成PDF时生成图片的问题
2009-04-29 15:13 11909最近需要做一个报告生成,需要生成PDF格式,就采用了itext ... -
ORA-01000: maximum open cursors exceeded
2009-04-22 21:04 1749今天做了个程序,中间牵扯到了有7个表格,数据库使用的是ORAC ... -
Applet获取URL参数
2009-04-03 14:43 3205因为在WEB中嵌入的Applet需要用到一个servlet输出 ... -
Web中使用Applet的方法
2009-04-02 13:42 4214Applet这东西,以前没有使用过,更没有在jsp页面中使用。 ... -
Spring-XML配置-Tomcat -Unable to validate using XSD
2009-04-02 13:03 6993今天把师姐用JFreeChar做的图的模块集成过来,结果部署到 ...
相关推荐
综上所述,通过`iframe`实现图片异步上传是一种常见的技术方案,它结合了HTML、JavaScript(jQuery)、JSP以及服务器端的处理,实现了无刷新的文件上传体验,提高了用户的交互性和系统的响应速度。在实际应用中,还...
这个"异步上传图片Demo"压缩包中应该包含了实现以上步骤的HTML、CSS和JavaScript代码,通过查看和学习这些代码,你可以更深入地理解异步图片上传与预览的实现细节。实际开发时,还需要考虑错误处理、进度显示、多...
"iframe异步上传"技术就是为了解决这个问题而出现的一种解决方案。这种技术结合了HTML的`<iframe>`元素和JavaScript,使得文件能够后台静默上传,不影响用户在页面上的其他操作。 首先,我们要理解什么是`<iframe>`...
总的来说,这个项目提供了一个基于iframe的跨浏览器图片上传预览解决方案,对于那些需要在老式浏览器上实现类似功能的开发者来说,是一个有价值的参考资料。通过深入研究和理解这个项目的源码,我们可以学习到如何在...
在本案例中,我们将讨论如何利用`iframe`来实现图片的上传和无刷新展示,以及涉及到的PHP和jQuery技术。 首先,`iframe`的基本用法是在HTML中创建一个`<iframe>`标签,并为其指定`src`属性,指向要加载的页面URL。...
PHP和Ajax实现图片文件上传功能是Web开发中一个常见需求,随着互联网技术的发展,异步文件上传也越来越受到开发者的青睐。异步文件上传指的是在用户不刷新页面的情况下,完成文件的上传过程。常见的实现方式包括使用...
这个项目中,开发者使用了`iframe`来实现图片的上传,同时将图片数据存储到Oracle数据库的Blob类型字段中。Blob(Binary Large Object)是数据库系统用来存储二进制大对象的数据类型,如图像、音频或视频文件。接...
综上所述,"ASP上传大全之四iframe上传组件"主要探讨了如何在ASP环境中,利用iframe实现无刷新的文件上传,涉及了HTML、JavaScript、ASP及服务器端的安全控制等多个技术层面。理解和掌握这些知识点,将有助于构建...
Uploader是非常强大的异步文件上传组件,支持ajax、iframe、flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证、图片预览、进度条等,广泛应用于淘宝网,比如退款系统、...
为了实现图片上传,我们需要做以下步骤: 1. **添加上传按钮**:首先,你需要在CKEditor的工具栏上添加一个用于上传图片的按钮。这可以通过修改配置文件或者直接在初始化CKEditor时添加按钮代码实现。例如,你可以...
大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参考,具体内容如下 ...
在图片上传场景中,iframe常被用来处理文件上传的异步请求,因为文件上传通常涉及到POST表单提交,可能导致页面刷新。通过在iframe中进行表单提交,可以在后台处理文件上传,而不会影响主页面的用户体验。开发者通常...
2. **IFrame上传**:IFrame方式利用了HTML的IFrame元素,创建一个隐藏的IFrame来提交表单,实现文件的异步上传。这种方式在不支持Flash和HTML5 File API的浏览器中依然有效,但是其性能相对较差,且无法获取到上传...
摘要: 使用iframe来处理异步上传图片,在现在这个时代来说,多多少少都有点落后了!单单就凭AJAX和JS就不能做到异步上传图片了吗? 感谢 think2011 这位兄台的JS库:https://github.com/think2011/LocalResizeIMG 先...
以上代码展示了如何使用jQuery File Upload插件实现基本的文件异步上传功能,包括选择文件、设置上传URL以及处理上传成功和失败的回调。 ### 7. 总结 异步文件上传是现代Web应用不可或缺的一部分,jQuery File ...
7. **异步处理**:考虑到用户体验,可以使用Ajax进行异步上传,这样在上传过程中不会阻塞用户界面,同时也可以展示上传进度。 综上所述,"java上传图片后立即将图片显示出来"这一功能的实现涉及到Java的文件上传...
在JavaScript中实现图片的伪异步上传是一种模拟Ajax文件上传的方法,因为标准的Ajax技术由于安全原因不支持直接上传文件。这种技术的核心是利用HTML的`<form>`表单和`<iframe>`来实现文件的后台上传,同时保持用户...
虽然现代的Web开发中较少使用,但在某些特定场景下,比如文件异步上传,iframe仍具有其独特优势。 2. **指定iframe的name属性**:在iframe标签中通过设置name属性来标识一个iframe,使其可以作为表单提交的目标窗口...
`iframe`目录可能包含使用IFrame实现上传的示例代码。 6. **更新与清理脚本**: `update.vbs`和`clear.vbs`可能是VBScript编写的脚本,用于更新或清理上传的文件。例如,`update.vbs`可能用于自动更新服务器上的...