jsp 上传文件

本文详细介绍了如何使用Java的commons-fileupload和commons-io库实现文件上传与接收的功能,包括上传组件代码和接收文件代码,同时展示了如何处理文件大小限制、临时文件存储等问题。
摘要由CSDN通过智能技术生成


将commons-fileupload-1.2.1.jar commons-io-1.4.jar引入项目

上传组件代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML >
<html>
  <head>  
    <title>上传文件</title>
  </head> 
  <body>
   	 上传文件程序应用示例
	<form action='action.jsp' method='post' enctype='multipart/form-data'>
		<%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。--%>
		请选择要上传的文件
		<input type='file' name='upfile' size='1'>
		<input type='submit' value='提交'>
	</form>
  </body>
</html>

接收文件代码

DiskFileUpload fu = new DiskFileUpload();	
			//   设置最大文件尺寸,这里是4MB		
			 fu.setSizeMax(4194304);
			//   设置缓冲区大小,这里是4kb
   			fu.setSizeThreshold(4096);
			//   设置临时目录:
  			 fu.setRepositoryPath(tempPath);
			//   得到所有的文件:
			List list=fu.parseRequest(request);
			FileItem f=(FileItem)list.get(0);
DiskFileUpload类会抛出异常,所以必须用try代码块包起来,fu.parseRequest(request)返回的是List类型,不能用File类型接收,从List中读取文件时,最好也不用File类,而是用FileItem类,用前者我无法用getName()读出文件名,对其它没有深究,而FileItem是专门用来接收从表单传过来的文件的,所以最好用它读文件。

当文件大小超过最大尺寸时,异常会被抛出,当大小超过缓冲区尺寸时,会将文件暂时存在临时目录中

File des=new File("e:temp/img/"+x+".jpg");
f.write(des);

可以将上传的文件写进硬盘。

    完整代码:

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="utf-8"%>
<%@ page import="org.apache.commons.fileupload.*"  import="java.io.*"%>
<!DOCTYPE html >
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>接收文件</title>
	</head>
	<body>
		<%		
			out.println("接收文件<br/>");
			String tempPath="e:/temp";
			try{
				DiskFileUpload fu = new DiskFileUpload();	
			//   设置最大文件尺寸,这里是4MB		
			 fu.setSizeMax(4194304);
			//   设置缓冲区大小,这里是20kb
   			fu.setSizeThreshold(20480);
			//   设置临时目录:
  			 fu.setRepositoryPath(tempPath);
			//   得到所有的文件:
			List list=fu.parseRequest(request);
			//out.println("1<br/>");
			FileItem f=(FileItem)list.get(0);
			//out.println("2<br/>");
			String str="空";			
			str=f.getName();
			out.println(str);
			Random r=new Random();
			int x=r.nextInt();
			File des=new File("e:temp/img/"+x+".jpg");
			f.write(des);
			}catch(Exception e)
			{
				out.println("文件过大");
			} 			
		 %>
	</body>
</html>





本代码主要应用的是jsp技术,而实现的文件上传功能,这个功能也是比较常见的,也是比较常用的,更是在网络中比较流行的。 技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作。 Web应用开发的JavaServer Pages技术方法 在开发JSP规范的过程中,太阳微系统公司(Sun Microsystems Inc.)与许许多多主要的Web服务器、应用服务器和开发工具供应商,以及各种各样富有经验的开发团体进行合作。其结果是找到了一种为应用和页面开发人员平衡了可移植性和易用性的开发方法。 JSP技术在多个方面加速了动态Web页面的开发: 将内容的生成和显示进行分离 使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。 在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。 强调可重用的组件 绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。 采用标识简化页面开发 Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。 通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值