web项目中文件的上传


前言

文件的上传和下载,在web项目的开发中都是非常常见的,而且知识点也很重要。所以今天小编就来总结一下,希望能够帮助到向我这样的小白。


一、文件的上传介绍(重点)

1.上传要求

(1)jsp文件需要有一个form标签,以及method=post请求;
(2)form标签的encType属性值必须为multipart/from-data值;
(3)在form标签中使用input type=file添加上传的文件;
(4)编写Servlet程序接受,处理上传的数据。

其中,encType=multipart/from-data表示提交的数据,以多段的形式进行拼接,然后以二进制的形式发送给服务器。

2.导包

在接触了web项目开发后,很多情况下代码都不用我们自己去写,而是拿别人封装好的类库直接使用,所以在文件上传时,我们要导入commons-fileupload.jar。

又因为commons-fileupload.jar需要依赖commons-io.jar这个包,所以两个包我们都需要导入。

commons-fileupload-1.2.1,jar
commons-io-1.4.jar

二、常用类

1.在上述两个jar包中,我们常用的类有以下几种:

ServletFileUpload 类,用于解析上传的数据。
 FileItem 类,表示每一个表单项。
boolean ServletFileUpload.isMultipartContent(HttpServletRequest request); 
判断当前上传的数据格式是否是多段的格式。
public List<FileItem> parseRequest(HttpServletRequest request);
解析上传的数据
boolean FileItem.isFormField() ;
判断当前这个表单项,是否是普通的表单项。
还是上传的文件类型。 
true 表示普通类型的表单项 false 表示上传的文件类型
String FileItem.getFieldName() ;
获取表单项的 name 属性值
String FileItem.getString() ;
获取当前表单项的值。 
String FileItem.getName(); 
获取上传的文件名 。
void FileItem.write( file ); 
将上传的文件写到 参数 file 所指向抽硬盘位置 。

2.上传时类库的使用

(1)上传文件时的表单及其属性值

<form action="http://localhost/upload/uploadServlet" method="post"
	enctype="multipart/form-data>
	用户名:<input type="text" name="username"><br>
	头像:<input type="file" name="photo"></br>
 	<input type="submit" value="上传">
</form>

(2)文件上传时的代码

@Override 
protected void doPost(HttpServletRequest req, 
       HttpServletResponse resp) throws ServletException, IOException {
    
     
       //1 先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的)
        if (ServletFileUpload.isMultipartContent(req)) {
    
     
        // 创建 FileItemFactory 工厂实现类 
        FileItemFactory fileItemFactory = new DiskFileItemFactory(); 
        // 创建用于解析上传数据的工具类 ServletFileUpload 类   
        ServletFileUpload servletFileUpload = new 	
        ServletFileUpload(fileItemFactory); 
        try {
    
    
        // 解析上传的数据,得到每一个表单项 FileItem 
        List<FileItem> list = servletFileUpload.parseRequest(req); 
        // 循环判断,每一个表单项,是普通类型,还是上传的文件
		for (FileItem fileItem : list) {
    
    
 				if (fileItem.isFormField()) {
    
    
 		// 普通表单项 
 						System.out.println("表单项的 name 属性值:" + 	fileItem.getFieldName()); 
		// 参数 UTF-8.解决乱码问题
  						System.out.println("表单项的 value 属性值:" + fileItem.getString("UTF-8"));
  					} else {
    
     
 		 // 上传的文件
   						System.out.println("表单项的 name 属性值:" + fileItem.getFieldName());
   						System.out.println("上传的文件名:" + fileItem.getName()); 
   						fileItem.write(new File("e:\\" + fileItem.getName())); 
 					 }
    		}
     } catch (Exception e) {
    
     
    		 e.printStackTrace();
     } 
   } 
}

总结

上述的jar包、表单的设计以及Servlet程序的编写,就是一种最简单的文件上传。希望能对小白们有所帮助。

Guess you like

Origin blog.csdn.net/z318913/article/details/115189410