FileUpload文件上传

1.进行文件上传时,表单需要做的准备:
1).请求方式为POST:<form action="uploadServlet" method="post"....>
2).使用file的表单域:<input type="file" name="file" />
3).请求的编码方式:<form action="uploadServlet" method="post" enctype="multipart/form-data">
表单以二进制传输数据

 

<form action="uploadServlet" method="post" enctype="multipart/form-data">
	File:<input type="file" name="file" 	/><br>
	<input type="submit" 	 value="Submit"/>
</form>

2.服务端:
1).不能再使用request.getParameter()等方式获取请求信息。获取不到,因为请求的编码方式已经改为multipart/form-data,
以二进制的方式来提交请求信息。
2).可以使用输入流的方式来获取。但不建议这样做。
3).具体使用commons-fileupload组件来完成文件的上传操作。
搭建环境:
①.加入commons-fileupload-1.3.3.jar
commons-io-2.6.jar
②.基本思想:
*commons-fileupload 可以解析请求,得到一个FileItem对象组成的List
*commons-fileupload 把所有的请求信息都解析为FileItem对象,无论是一个一般的文本域还是一个文件域。
*可以调用FileItem的isFormField()方法来判断是一个表单域或不是表单域(则是一个文件域)
*再来进一步获取信息

 

	if (item.isFormField()) {
	    String name = item.getFieldName();
	    String value = item.getString();
	    ...
	}

如果是一个多选,如何获取对应的字符串数组:每一个都对应一个FileItem对象。

 

	<input type="checkbox" name="interesting" value="Reading"/>Reading
	<input type="checkbox" name="interesting" value="Party"/>Party
	<input type="checkbox" name="interesting" value="Shopping"/>Shopping
			

 

if (!item.isFormField()) {
	    String fieldName = item.getFieldName();
	    String fileName = item.getName();
	    String contentType = item.getContentType();
	    boolean isInMemory = item.isInMemory();
	    long sizeInBytes = item.getSize();
	   
	    InputStream uploadedStream = item.getInputStream();
	    ...
	    uploadedStream.close();
	}

③.如何得到List<FileItem>对象
>简单的方式

// Create a factory for disk-based file items
	DiskFileItemFactory factory = new DiskFileItemFactory();
	
	// Configure a repository (to ensure a secure temp location is used)
	ServletContext servletContext = this.getServletConfig().getServletContext();
	File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
	factory.setRepository(repository);
	
	// Create a new file upload handler
	ServletFileUpload upload = new ServletFileUpload(factory);
	
	// Parse the request
	List<FileItem> items = upload.parseRequest(request);	

>复杂的方式:可以为文件的上传加入一些限制条件和其他的属性。

	// Create a factory for disk-based file items
	DiskFileItemFactory factory = new DiskFileItemFactory();
	
	//设置内存中最多可以存放的上传文件的大小,若超出则把文件写到一个临时文件夹中。以byte为单位
	factory.setSizeThreshold(yourMaxMemorySize);
	//设置那个临时文件夹
	factory.setRepository(yourTempDirectory);
	
	// Create a new file upload handler
	ServletFileUpload upload = new ServletFileUpload(factory);
	
	// 设置上传的文件的总的大小。也可以设置单个文件的大小。
	upload.setSizeMax(yourMaxRequestSize);
	
	// Parse the request
	List<FileItem> items = upload.parseRequest(request);

3.使用fileupload组件完成文件的上传应用
1).需求:
①.上传
>在upload.jsp页面上使用jQuery实现“新增一个附件”,“删除附件”。但至少需要保留一个
>对文件的扩展名和文件的大小进行验证,一下的规则是可配置的,而不是写死在程序中的
>>文件的扩展名必须为.pptx,docx,doc
>>每个文件的大小不能超过1M
>>总的文件大小不能超过5M。
>若验证失败,则在upload.jsp页面上显示错误消息:
>>若某一个文件不符合要求:xxx文件拓展名不合法或xxx文件大小超过1M
>>总的文件大小不能超过5M
>若验证通过,则进行文件的上传操作
>>文件上传,并给一个不能和其他文件重复的名字,但拓展名不变
>>在对应的数据表中添加一条记录。

 

	<script type="text/javascript">	
	$(function () {
		//1.获取#addFile,并为其添加click响应函数
		var i=2;
		$("#addFile").click(function () {
			//2.利用jQuery生存城一下节点,注意数字的变化,并把他们放在#br的前面
			//其中“删除”按钮可以删除当前的file和desc相关节点
			/*
			File1:<input type="file" name="file1" 	/>
			<br>
			Desc1:<input type="text" name="desc1" /><button>删除</button>
			<br>
			*/
			
			$("#br").before("<div>File"
					+i+":<input type='file' name='file"
					+i+"'/><br>Desc"
					+i+":<input type='text' name='desc"
					+i+"'/><input type='button' value='删除' id='button' /><br><br></div>")
					.prev("div").find("#button").click(function(){
						$(this).parent("div").remove();
						i--;
						
					});
			i++;
			
		});
		
	});	
</script>		

4.如何修改小工具或框架的源代码?
1).原则:能不修改就不修改。
2).修改的方法:
>修改源代码,替换jar包中对应的class文件。
>在本地新建相同的包,和类,在这个类中修改即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
commons-fileupload是一个用于处理文件上传的Java类库。它提供了简单易用的API,可以用于实现文件上传功能。要使用commons-fileupload,你需要进行以下步骤: 1. 导入commons-fileupload库:下载commons-fileupload库的jar文件,并将其添加到你的项目中。 2. 创建Servlet或Controller类:创建一个处理文件上传的Servlet或Controller类。 3. 创建DiskFileItemFactory对象:使用DiskFileItemFactory类创建一个文件项工厂对象,设置临时文件存储路径和内存缓冲区大小。 4. 创建ServletFileUpload对象:使用ServletFileUpload类创建一个文件上传对象,并设置文件上传的大小限制和字符编码。 5. 解析请求:使用ServletFileUpload对象的parseRequest()方法解析请求,得到FileItem对象的列表。 6. 处理文件:遍历FileItem对象的列表,对每个文件项进行处理。你可以判断文件项是否是普通字段还是文件,以及获取字段名称、文件名、文件大小等信息。 以下是一个简单的示例代码: ```java import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.*; import org.apache.commons.fileupload.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { // 处理普通字段 String fieldName = item.getFieldName(); String fieldValue = item.getString(); // ... } else { // 处理文件 String fieldName = item.getFieldName(); String fileName = item.getName(); long fileSize = item.getSize(); // ... } } // 文件上传成功 response.getWriter().println("文件上传成功!"); } catch (FileUploadException e) { // 文件上传失败 response.getWriter().println("文件上传失败!"); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值