Servlet技术:文件上传

文件上传,即用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。

思路:读取用户上传的文件,写入服务器文件目录。

I/O

文件上传要点:

表单 method 属性应该设置为 POST 方法,不能使用 GET 方法;

表单 enctype 属性应该设置为 multipart/form-data;

文件上传后需要防止重名;

servlet.java

package cn.xtnotes.servlet;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.UUID;

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

@MultipartConfig  //使得当前servlet接受文件上传

public class Servlet2 extends HttpServlet {



	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("gbk"); //设置请求数据编码
		response.setCharacterEncoding("gbk");//设置响应数据编码
		PrintWriter pw=response.getWriter();
		
		Part part=request.getPart("mf");// 获取上传的文件名
		String fileName=part.getSubmittedFileName(); //获取上传的文件名
		String suffix=fileName.substring(fileName.lastIndexOf("."), fileName.length()); //获取文件后缀名
		System.out.println("文件名:"+fileName);
		String newFileName=UUID.randomUUID()+suffix; //创建写入文件的文件名
		String serverPath=request.getServletContext().getRealPath("upload");//获取文件上传路径
		System.out.println("服务器上传路径:"+serverPath);
		FileOutputStream fos=new FileOutputStream(serverPath+"/"+newFileName);//创建服务器文件对象
		InputStream is=part.getInputStream();
		byte[] b=new byte[1024];
		int l=is.read();
		while(l!=-1) {
			fos.write(b, 0, l);
			l=is.read();
		}
		pw.print("文件上传成功");
		fos.close();
		is.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doGet(request, response);
	}
}

upload.html


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="http://127.0.0.1:8080/U8/Servlet2" method="post" enctype="multipart/form-data">
<input type="file" name="mf">
<input type="submit" value="上传文件">
</form>

</body>
</html>

upload

阅读剩余
THE END