【JSP】文件上传局部刷新

看到局部刷新,大家联想到的肯定是Ajax,但实际上,Ajax是没有办法实现文件上传的局部刷新的。由于安全性的需要,JavaScript代码是不能访问客户端文件系统,所以通过XMLHttpRequest的请求参数是无法得到上传文件的内容的,只能得到文件名。

那么我们又是怎样实现文件上传局部刷新的呢?其实我们再上传文件的时候采用的还是同步方式,为了不刷新整个页面,我们需要用到隐藏的iframe,我们在页面上增加一个隐藏的<iframe>元素,该元素将会作为提交表单的target。

文件上传要求表单的提交方式是POST,另外需要设置表单的MIME编码enctype="multipart/form-data"。页面代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>upload</title>
</head>
<body>
	<form action="UploadServlet" method="post" enctype="multipart/form-data" target="hideframe">
		<input type="file" name="file"/>
		<input type="submit" value="上传"/>
	</form>
	<iframe name="hideframe" style="display:none"></iframe>
</body>
</html>

表单的target属性对应与<iframe>的name属性,这样就能够只更新<iframe>元素,从而实现无刷新的文件上传。

上传文件用到一个开源项目:commons-fileupload,将其添加到应用的WEB-INF/lib路径下即可。上传的Servlet代码如下:

public class UploadServlet extends HttpServlet {
	/**
	 * 上传文件
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		// 工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 解析器
		ServletFileUpload sfu = new ServletFileUpload(factory);
		// 解析,得到List
		try {
			List<FileItem> list = sfu.parseRequest(request);
			FileItem fi = list.get(0);
			//得到文件保存的路径
			String fileName = fi.getName();//获取上传的文件名称
			String root = this.getServletContext().getRealPath("files/upload/");
			//创建文件
			File destFile = new File(root, fileName);
			//写数据
			fi.write(destFile);
			out.write("<script type='text/javascript'> alert('文件上传成功') </script>");
		} catch (FileUploadException e) {
			e.printStackTrace();
			out.write("<script type='text/javascript'> alert('文件上传不成功,请重试') </script>");
		}
	}
}

例子写得比较简单,在实际上传处理中,FileItem还有以下常用方法

boolean isFormField():是否为普通表单项!返回true为普通表单项,如果为false即文件表单项;

String getFieldName():返回当前表单项的名称;

String getString(String charset):返回表单项的值;

long getSize():返回上传文件的字节数;

InputStream getInputStream():返回上传文件对应的输入流

要注意一点,request.getParametere("xxx")这个方法在表单为enctype="multipart/form-data"时作废,它只会返回null。所以要得到普通表单项的值,要使用上面说到的getString(String charset)方法。

Author:立礼

Sign:人生不要有太多的幻想,而要有更多的行动。

时间: 2024-10-19 02:22:27

【JSP】文件上传局部刷新的相关文章

jsp文件上传

整理了一下jsp的上传下载,由客户端到服务端,包括一些常规的业务 一客户端 先看最基本的情况 1 在表单设置multipart/form-data,通过提交键把数据和附件一次性提交的.服务器更多的是对应这个例子. 但有以下问题 一般的Ajax无法把附件数据发过去 附件往往涉及比较多问题,比如上传需要时间(要有个进度),上传也有可能不成功等,上传需要校验的东西就比较多. 2于是就有把上传分开来自己执行的.上传项在浏览文件后就开始上传,其他表单数据在提交表单时再提交. 更详细地说是:上传在表单中有自

jsp文件上传、下载

一.文件上传 上传文件是Web开发中经常要用到的功能:例如在基于B/S的人事信息管理系统中上传照片,在新闻发布系统中上传图片等等.....要实现文件上传功能,就需要综合利用java中的文件输入和输出相关的类. 在TCP/IP中,最早出现的文件上传机制是FTP.它是将文件由客服端发送到服务器的标准机制,能够考虑到跨平台的文本和二进制格式文件.但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp 运行机制所决定的. 下面是上传文件的jsp页面: [html] view plaincopypr

JSP文件上传下载组件(2)

实现文件下载 1.新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); 2.初始化 su.initialize(pageContext); 3.设定contentDisposition为null,以禁止浏览器自动打开文件,保证单机链接后是下载文件,若不设定,浏览器会自动打开它 su.setContentDisposition(null); 4.下载文件su.download("xxx"); JSP文件上传下载组件(2)

JSP文件上传下载组件(1)

使用jspSmartUpload可以实现文件上传和下载 jspSmartUpload组件主要有4个类:File类,Files类,Request类和SmartUpload类 *SmartUpload类的initialize方法:这个方法是上传和下载共用的方法,他的作用是执行上传和下载的初始化工作,必须第一个执行.原型有多个,主要使用下面这个: public final void initialize(javax.serlvet.jsp.PageContext pageContext) 其中,pag

Struts2之命名空间详解及JSP文件上传了解

学习案例:struts配置元素详解以及简单的jsp文件上传. 一.案例分析: a)将鼠标放在struts.xml中的package标签上.Alt+/会自动提示: 1.name 2.namespace 3.extends 4.externalReferenceResolver 5.abstract 6.strict-method-invocation b)abstract属性表示该包是抽象的,不能直接使用,需要有子包继承才能使用.Struts-default既是abstract,所以我们要继承使用

Java+jsp文件上传(ajax)的方式

今天在开发项目的时候碰到了一个需求,一个简单的文件上传.但是上传后需要通过回调函数做一些上传完毕的操作.发现通过<form><file><input submit>能做到文件上传,但是回调函数不是很好实现. 于是打算改用ajax的形式去提交.以下是实现的代码: jsp页面:(css样式和标签引入属于自己定制的,与本文无关,直接去了就好): <%@page language="java" contentType="text/html;

HTTP文件上传插件开发文档-JSP

版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/http-uploader/index.asp 在线演示:http://www.ncmem.com/products/http-uploader2/index.asp, 开发文档:asp,jsp,php,asp.net, 升级日志:http://www.cnblogs.com/xproer/archive/20

JSP学习笔记(四):文件上传

JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档.我们使用 Servlet 来处理文件上传,使用到的文件有: upload.jsp : 文件上传表单. message.jsp : 上传成功后跳转页面. UploadServlet.java : 上传处理 Servlet. 需要引入的 jar 文件:commons-fileupload-1.3.2.commons-io-2.5.jar. 结构如下所示: 1.创建一个文件上传表

jsp实现文件上传

1.1.  jsp文件上传 1.1.1.  新建一个web工程 1.1.2.  上传页面index.jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Cont