使用第三方组件实现上传文件

使用第三方组件实现上传文件功能需要在项目lib下目录导入两个Jar包(commons-fileupload 和  commons-io)

commons-io下载地址:http://commons.apache.org/proper/commons-io/download_io.cgi

commons-fileupload下载地址:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

关键步骤:

  1. 在JSP文件中使用page指令导入Commons-FileUpload组件所需的类
  2. 判断请求信息中的内容是否是multipart类型,如果是则进行处理
  3. 通过FileItemFactory工厂对象实例化ServletFileUpload对象
  4. 调用ServletFileUpload对象的parseRequest()将表单中字段解析成FileItem对象的集合
  5. 通过迭代依次处理每个FileItem对象,如果是普通字段,通过getString()方法得到相应表单字符的值,该值与表单字段中的"name"属性对应,如果是文件字段,则通过File的构造方法构建一个指定路径名和文件名的文件,并通过FileItem对象的Write()的方法将上传文件的内容保存到文件中

 

示例代码: 

 

 index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
   <form  action="doindex.jsp"  enctype="multipart/form-data" method="post">
   姓名:<input type="text" name="username">
   <input type="file" name="filename">
   <input type="submit" value="提交">
   </form>
  </body>
</html>

 

处理index.jsp请求的页面doindex.jsp

<%@page import="org.apache.commons.fileupload.FileUploadBase"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'doindex.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
<%
request.setCharacterEncoding("utf-8");
	String uploadFileName = "";//上传的文件名
	String fieldName = "";//表单字段name的属性值

	//请求信息中的内容是否是multipart类型
	boolean isMultipart = ServletFileUpload.isMultipartContent(request);
	
	//上传文件的储存路径(服务器文件系统上的绝对文件路径)
	String uploadFilePath = request.getSession().getServletContext()
			.getRealPath("/WEB-INF/upload/");
			
	//判断请求的表单是否是multipart/form-data类型
	if (isMultipart) {

		
		//创建临时文件目录
		File tempPathFile = new File("E:\\temp\\buffer\\");
		if (!tempPathFile.exists()) //判断文件或者目录是否存在
			tempPathFile.mkdirs(); //创建指定的目录,包括所有必需但不存在的目录
			
			
		//创建解析Fileitem工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		
		//设置缓存区大小(4k);
		factory.setSizeThreshold(4*1024);  
		
		//设置上传文件用到的临时文件存放路径
		factory.setRepository(tempPathFile);
		
		//创建上传文件对象
		ServletFileUpload upload = new ServletFileUpload(factory);
	
		//设置整个文件允许大小
		upload.setFileSizeMax(30*1024*1024);//30M
	
		//设置完整请求的最大允许大小	
		upload.setSizeMax(60*1024*1024);//60M
     	try {
     	

            //解析请求
			List<FileItem> items = upload.parseRequest(request);	
			//迭代
			Iterator<FileItem> iter = items.iterator();
			
			//逐个处理每一个表单
			while (iter.hasNext()) {

				FileItem item = (FileItem) iter.next();
				
				//普通表单字段
				if (item.isFormField()) { 
				
					fieldName = item.getFieldName();
					if (fieldName.equals("username")){
						out.print(item.getString("utf-8") + "上传了文件!");
					}
                //文件表单字段
				}else{ 
             
					String fileName = item.getName();
					
					List<String> fileType = Arrays.asList("gif", "bmp",
							"jpg", "png");
							
					String ext = fileName.substring(fileName
							.lastIndexOf(".") + 1);

					if (!fileType.contains(ext)) {
                      
 						out.print("文件上传失败,文件类型只能是gif,bmp,jpg,png格式!");
					}else{

						if (fileName != null && !fileName.equals("")) {
					        //得到文件名
							File fullFile = new File(item.getName());
							//文件上传路径及文件名
							File saveFile = new File(uploadFilePath,
							fullFile.getName());
							//上传文件
							item.write(saveFile); 
							uploadFileName = fullFile.getName();
							out.print("上传成功后的文件名是:" + uploadFileName+"文件大小是:"+item.getSize()/1024/1024+"M!");

						}
 					}

				}
				
			}
			//表单大小上传异常
		}catch(FileUploadBase.SizeLimitExceededException ex){
		out.print("表单完整大小为:"+upload.getSizeMax()/1024/1024+"M!");
		//单个文件上传异常
		}catch(FileUploadBase.FileSizeLimitExceededException ex){  
		out.print("上传文件过大:"+upload.getFileSizeMax()/1024/1024+"M!");
		
		}catch(Exception e){
		out.print("出错了!");
		}

	}
 %>
  <body>
    
  </body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想让其他人使用你编写的 JavaScript 文件,你可以将其打包成一个库或者插件,然后发布到 npm 或者 GitHub 等代码托管平台上。 下面是一些步骤: 1. 创建一个项目并编写 JavaScript 文件 2. 使用工具如 Webpack 或 Rollup 打包 JavaScript 文件为库或插件 3. 通过 npm 或 GitHub 等代码托管平台发布你的库或插件 4. 在文档中提供使用说明和示例代码 当其他人想要使用你的库或插件时,他们可以通过 npm 或者将代码下载到本地,然后在他们的项目中引入你的库或插件,并按照你提供的文档进行使用。 ### 回答2: JavaScript编辑的文件可以通过以下几种方式提供给第三方使用: 1. 直接提供.js文件:将JavaScript文件打包为一个单独的.js文件,然后将该文件提供给第三方使用第三方只需要将该文件引入到他们的HTML页面中,就可以使用其中定义的函数、对象或变量。 2. 提供一个库或框架:将JavaScript文件封装成一个库或框架,使得第三方可以更加方便地使用其中的功能。例如,常见的JavaScript库如jQuery、React等,或者框架如Angular、Vue等。第三方可以通过链接或下载这些库来使用其中定义的函数、组件、指令等。 3. 提供一个包管理工具:通过使用包管理工具如NPM或Yarn,将JavaScript文件发布到一个公共或私有的代码仓库中,然后第三方可以通过包管理工具将该文件作为一个依赖项添加到他们的项目中。这种方式可以方便地管理和更新依赖项,并且可以在多个项目之间共享代码。 4. 提供一个API:将JavaScript文件部署到服务器上,并提供一个API供第三方进行调用。第三方可以通过发送请求到该API,并传递相应的参数来调用其中定义的函数或执行某些操作。这种方式通常用于提供与服务器交互的功能或提供一些高级功能给第三方使用。 总的来说,JavaScript编辑的文件可以通过直接提供.js文件、提供库或框架、提供包管理工具、或提供API等方式给第三方使用。根据具体的需求和使用场景选择合适的方式。 ### 回答3: JavaScript编辑的文件可以给第三方使用的主要方法有以下几种: 1. 打包成库:将JavaScript文件编写成一个独立的库,通过打包工具如Webpack或Rollup打包,可以生成一个可以直接在浏览器或服务器端引用的压缩文件(通常是.min.js文件)。第三方用户可以通过script标签或其他方式引入该文件,并使用其中的函数、方法或对象。 2. 导出为模块:使用模块化工具如CommonJS、ES Modules或AMD将JavaScript文件导出为可复用的模块。第三方用户可以通过import或require语句引入该模块,并使用其中的函数、对象、类等。 3. 发布到CDN:将JavaScript文件上传到CDN(内容分发网络),CDN会将文件分发到全球的各个节点。第三方用户可以直接从CDN上引用该文件,无需下载和部署到自己的服务器上,提高了文件加载速度和用户体验。 4. 提供API接口:将JavaScript文件编写为一个服务端API接口,提供给第三方用户调用。用户可以通过HTTP请求访问该接口,并按照接口文档提供的规范传入参数,通过接口获取所需的数据或执行特定的操作。 需要注意的是,在提供给第三方使用时应该注意文件的兼容性和安全性,并提供详细的文档和示例代码以帮助用户正确使用。同时,还可以考虑使用JavaScript的打包工具、模块化工具或代码混淆工具,以提高代码可读性和保护代码安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值