Servlet中可以使用post请求上传文件,使用getReader()和getInputStream()自己处理,也可以使用getPart()或getParts()封装了一些功能的方法处理,getParts()可以同时上传多个文件。接下来使用四个Demo来练习一下使用方法
一.使用getReader()和getInputStream()
Demo1
<!-- 这是HTML代码块,窗体网页上显示的是一个选择文件的input框和一个upload的button -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="filename" value="" /><br>
<input type="submit" value="Upload" name="upload" />
</form>
</body>
</html>
/*
* 这是Servlet处理部分
*/
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class uploadServlet
*/
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//读取请求Body
byte[] body = readBody(request);
//取得所有Body内容的字符串表示
String textBody = new String(body, "ISO-8859-1");
//取得上传的文件的文件名(取得路径并分离)
String filename = getFilename(textBody);
//取得文件内容在Body中的首尾索引
Position p = getFilePosition(request, textBody);
//将内容输出到文件
writeTo(filename, body, p);
}
//存放索引的类
class Position{
int begin;
int end;
Position(int begin, int end) {