javaweb之文件的上传步骤及代码

1.JSP上传

2.DiskFileItemFactory类

3.ServletFileUpload类

4.request

5.文件的描述,上传的文件

演示代码:这里需要注意两点,不同的浏览器是不一样的,有的浏览器上传的时候是全路径,而有的浏览器上传只是一个文件的名字,所以,全路径的浏览器还要做一下字符串的处理。还有一点就是,可能程序已经好使了,但是在eclipse中仍然看不到文件,这是正常的,需要在我的电脑中进行查找。

JSP页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/DemoTest/Upload" enctype="multipart/form-data" method="post">
	文件描述:<input type="text" name="text"><br>
	上传文件:<input type="file" name="myfile"><br>
	<input type="submit" value="上传">
</form>
</body>
</html>

上传时是全路径的浏览器

package mine.test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.ServletException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/Upload")
public class Upload extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public Upload() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//这个版本是可以处理带路径上传的拼接字符串
		//创建磁盘文件工厂类
		DiskFileItemFactory factory=new DiskFileItemFactory();
		//创建核心的解析对象,并把factory传进去
		ServletFileUpload upload=new ServletFileUpload(factory);
		upload.setHeaderEncoding("UTF-8");
		try {
			@SuppressWarnings("unchecked")
			//解析request,获取文件列表
			List<FileItem> list=upload.parseRequest(request);
			//高级for进行遍历
			for(FileItem fileItem:list) {
				//如果为普通文本项
				if(fileItem.isFormField()) {
					String name=fileItem.getFieldName();
					String value=fileItem.getString("UTF-8");
					System.out.println(name+":"+value);
				}else {
					//如果为文件项
					String filename=fileItem.getName();
					System.out.println(filename);
					int index=filename.lastIndexOf("\\");
					String sfilename=filename.substring(index+1);
					System.out.println(sfilename);
					//获取输入流
					InputStream in=fileItem.getInputStream();
					//获取存储的路径
					String path=getServletContext().getRealPath("/upload");
					System.out.println(path);
					//获取输出流并进行读写
					String spath=path+"\\"+sfilename;
					System.out.println(spath);
					OutputStream os=new FileOutputStream(spath);
					int len=0;
					byte[] b=new byte[1024];
					while((len=in.read(b))!=-1) {
						os.write(b, 0, len);
					}
					in.close();
					os.close();
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

上传时仅仅是文件的浏览器

package mine.test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.ServletException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class Upload1
 */
@WebServlet("/Upload1")
public class Upload1 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Upload1() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
		//创建磁盘文件工厂类
				DiskFileItemFactory factory=new DiskFileItemFactory();
				//创建核心的解析对象,并把factory传进去
				ServletFileUpload upload=new ServletFileUpload(factory);
				upload.setHeaderEncoding("UTF-8");
				try {
					@SuppressWarnings("unchecked")
					//解析request,获取文件列表
					List<FileItem> list=upload.parseRequest(request);
					//高级for进行遍历
					for(FileItem fileItem:list) {
						//如果为普通文本项
						if(fileItem.isFormField()) {
							String name=fileItem.getFieldName();
							String value=fileItem.getString("UTF-8");
							System.out.println(name+":"+value);
						}else {
							//如果为文件项
							String filename=fileItem.getName();
							System.out.println(filename);
							//获取输入流
							InputStream in=fileItem.getInputStream();
							//获取存储的路径
							String path=getServletContext().getRealPath("/upload");
							System.out.println(path);
							//获取输出流并进行读写
							OutputStream os=new FileOutputStream(path+"/"+filename);
							int len=0;
							byte[] b=new byte[1024];
							while((len=in.read(b))!=-1) {
								os.write(b, 0, len);
							}
							in.close();
							os.close();
						}
					}
				} catch (FileUploadException e) {
					e.printStackTrace();
				}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/86539075