文件的上传(FileItem)

加入两个jar包

commons-fileupload-1.2.1.jar
commons-io-2.0.jar

package com.greatest.flie.servlet;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.FileCleanerCleanup;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileCleaningTracker;

/**
 * Servlet implementation class FileServlet
 */
@WebServlet("/uploadServlet")
public class FileUploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 创建基于磁盘的文件项的工厂
		//FileItemFactory factory = new DiskFileItemFactory();
		// 新建一个文件上传处理程序
		//ServletFileUpload upload = new ServletFileUpload(factory);
		// Parse the request
		//> 复杂的方式: 可以为文件的上传加入一些限制条件和其他的属性
		// 创建基于磁盘的文件项的工厂
		DiskFileItemFactory factory1 = new DiskFileItemFactory();
		FileCleaningTracker fileCleaningTracker = 
			FileCleanerCleanup.getFileCleaningTracker(getServletContext());
		 factory1.setFileCleaningTracker(fileCleaningTracker);
		//设置内存中最多可以存放的上传文件的大小, 若超出则把文件写到一个临时文件夹中. 以 byte 为单位
		factory1.setSizeThreshold(1024 * 500);
		//设置那个临时文件夹
		File tempDirectory = new File("d:\\tempDirectory");
		factory1.setRepository(tempDirectory);
		// 新建一个文件上传处理程序
		ServletFileUpload upload1 = new ServletFileUpload(factory1);
		//设置上传文件的总的大小. 也可以设置单个文件的大小. 
		upload1.setSizeMax(1024 * 1024 * 50);
		// 解析请求
		        // 1. 得到 FileItem 的集合 items
				// Parse the request
				try {
					List <FileItem>/* FileItem */ items1= upload1.parseRequest(request);
					// 2. 遍历 items:
					for (FileItem item : items1) {
						// 若是一个一般的表单域, 打印信息
						if (item.isFormField()) {
							String name = item.getFieldName();
							String value = item.getString();
							System.out.println(name + ": " + value);
						}
						/*  flie
							commons-beanutils-1.8.0(1).jar
							application/octet-stream
							231320
							d:\files\commons-beanutils-1.8.0(1).jar
							desc: Zxc
							getName方法用于获得文件上传字段中的文件名。
                                                                 注意IE或FireFox中获取的文件名是不一样的,IE中是绝对路径,FireFox中只是文件名。
						 * */
						// 若是文件域则把文件保存到 d:\\files 目录下.
						else {
							String fieldName = item.getFieldName();
							String fileName = item.getName();
							String contentType = item.getContentType();
							long sizeInBytes = item.getSize();

							System.out.println(fieldName);
							System.out.println(fileName);
							System.out.println(contentType);
							System.out.println(sizeInBytes);

							InputStream in = item.getInputStream();
							byte[] buffer = new byte[1024];
							int len = 0;

							fileName = "d:\\files\\" + fileName;
							System.out.println(fileName);

							OutputStream out = new FileOutputStream(fileName);

							while ((len = in.read(buffer)) != -1) {
								out.write(buffer, 0, len);
							}

							out.close();
							in.close();
						}
					}

				} catch (FileUploadException e) {
					e.printStackTrace();
				}
		     
//		InputStream   f=request.getInputStream();
//		Reader   in=new InputStreamReader(f);
//		BufferedReader  b=new BufferedReader(in);
//		String  str=null;
//		while((str=b.readLine())!=null){
//			System.out.println(str);
//		}
				
		
		
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   <form action="uploadServlet" method="post" enctype="multipart/form-data">
      File:<input type="file" name="flie"/>
      <br><br>
      desc:  <input type="text" name="desc"/>
      <br><br>
      <input type="submit" value="Submit"/>
   </form>

</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_42676998/article/details/82872025