Jsp文件上传

用户常常需要上传一些文件给系统,所以就涉及到了web的文件上传。首先要在from表单中 声明 method="post" enctype="multipart/form-data"两个属性,这是必不 可少的。

然后在服务器接收参数的时候就麻烦了,

// 接收用户上传的方法
	public String upload(HttpServletRequest request, HttpServletResponse response) {
		// 准备获取数据
		Map<String, String> parameter = new HashMap<String, String>();// 字段参数表,用于存储字段参数
                String songUrl = "";
		String coverUrl = "";
		String lrcUrl = "";
                String id = UUID.randomUUID().toString();
		// 准备文件上传
		String fileName = null;// 文件名
		InputStream in = null;// 文件输入流
		FileOutputStream out = null;// 文件输出流
		File filePath = null;// 文件存储路径
		// 创建磁盘工厂,调用第三方jar包commons-fileupload-1.3.3.jar
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 创建工厂核心对象
		ServletFileUpload sfu = new ServletFileUpload(factory);
		// 核心对象解析请求
		try {
			List<FileItem> parseRequest = sfu.parseRequest(request);
			// 遍历文件项:字段或文件
			for (FileItem fileItem : parseRequest) {
				if (fileItem.isFormField()) {
					// 拿到字段,封装内容到map集合
					parameter.put(fileItem.getFieldName(), fileItem.getString("utf-8"));
				} else {
					// 拿到文件
					fileName = fileItem.getName();
					in = fileItem.getInputStream();
					// 存储文件
                                        //通过文件名采用不同的方法存到本地,单一文件上传可不要if-else
					if (fileItem.getFieldName().equals("song")) {
						// 存储音频
						// 获取文件后缀名
                                                //分割文件名
						String[] str = fileName.split("\\.");//注意“.”是要用转义字符的
						// 存入数据库的地址,每个人要存的地方不一样,一般来说存能访问的地址或本地存放地址,注意一下
						songUrl = SyayicParameter.song_path + id + "." + str[str.length - 1];//这里我调用的是一个静态属性
						filePath = new File(System.getProperty("catalina.home") + "\\webapps\\mixueFile\\song");// 文件存放路径
						//检查文件是否已经存在
                                               if (!filePath.exists()) {
							filePath.mkdirs();
						}
						out = new FileOutputStream(filePath.getAbsolutePath() + "\\" + id + "." + str[str.length - 1]);
                                                 //调用第三jar包commons-io-2.5.jar
						IOUtils.copy(in, out);
					} else if (fileItem.getFieldName().equals("cover")) {
						// 存储封面
						String[] str = fileName.split("\\.");
						// 存入数据库的地址
						if (fileName.equals("")) {
							// 用户未上传封面
							coverUrl = StaticParameter.cover_path + "default.png";
						} else {
							coverUrl = StaticParameter.cover_path + id + "." + str[str.length - 1];
							// 存入本地的地址
							filePath = new File(System.getProperty("catalina.home") + "\\webapps\\mixueFile\\cover");
							if (!filePath.exists()) {
								filePath.mkdirs();
							}
							out = new FileOutputStream(
									filePath.getAbsolutePath() + "\\" + id + "." + str[str.length - 1]);
							IOUtils.copy(in, out);
						}
					} else if (fileItem.getFieldName().equals("lrc")) {
						// 储存歌词
						String[] str = fileName.split("\\.");
						// 存入数据库的地址
						if (fileName.equals("")) {
							// 用户未上传歌词
							lrcUrl = StaticParameter.lrc_path + "default.lrc";
						} else {
							lrcUrl = StaticParameter.lrc_path + id + "." + str[str.length - 1];
							// 存入本地的地址
							filePath = new File(System.getProperty("catalina.home") + "\\webapps\\mixueFile\\lrc");
							if (!filePath.exists()) {
								filePath.mkdirs();
							}
							out = new FileOutputStream(
									filePath.getAbsolutePath() + "\\" + id + "." + str[str.length - 1]);
							IOUtils.copy(in, out);
						}
					}
				}
			}
                         //其他参数存入数据库
			if (ss.addSong(id, parameter.get("name"), songUrl, coverUrl, lrcUrl, parameter.get("author"),
					new Timestamp(System.currentTimeMillis()), 0, parameter.get("upper"))) {
				return null;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

本代码主要应用的是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、付费专栏及课程。

余额充值