下面是“javaWeb实现简单文件上传”的完整攻略。
一、准备工作
在开始之前,需要准备以下工作:
- 一个支持Servlet、JavaServer Pages(JSP)的JavaWeb环境,如Tomcat、Jetty等。
- 一个用于上传文件的HTML表单。
- 编写Java Servlet程序来处理上传文件,并保存在服务器上。
二、HTML表单
HTML表单必须包含一个文件输入标签,如下所示:
<form action="uploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
其中,action
属性为Servlet程序的地址,method
属性为post
,enctype
属性指定为multipart/form-data
,表示上传文件类型的编码方式。
三、Servlet程序
Servlet程序最关键的是处理multipart/form-data
类型的上传文件,JavaWeb提供了javax.servlet.http.Part
接口来处理上传文件,后来JavaEE 7版本增加了一个java.nio.file
包特性来提供更多的方式进行文件处理。
以下是使用javax.servlet.http.Part
接口的示例:
@WebServlet("/uploadServlet")
@MultipartConfig(fileSizeThreshold = 1024 * 1024, // 1MB
maxFileSize = 1024 * 1024 * 50, // 50MB
maxRequestSize = 1024 * 1024 * 100) // 100MB
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// 获取上传文件
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
InputStream fileContent = filePart.getInputStream();
// 保存上传文件
File uploads = new File("uploads");
File file = new File(uploads, fileName);
try (InputStream input = fileContent; OutputStream output = new FileOutputStream(file)) {
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
// 输出上传结果
response.getWriter().print("Upload completed!");
}
}
上面的示例中,使用了javax.servlet.annotation.MultipartConfig
注解来指定上传文件的大小限制,javax.servlet.http.Part
接口的getSubmittedFileName()
方法可以获取上传文件的文件名,getInputStream()
方法可以获取上传文件的输入流,使用Java I/O流的方式保存上传文件到指定目录中。
四、Java NIO
Java NIO(Non-blocking IO)提供了几个用于文件处理的接口,比如java.nio.file.Path
、java.nio.file.Files
、java.nio.channels.FileChannel
等。下面是使用Java NIO的示例:
@WebServlet("/uploadServlet")
@MultipartConfig(fileSizeThreshold = 1024 * 1024, // 1MB
maxFileSize = 1024 * 1024 * 50, // 50MB
maxRequestSize = 1024 * 1024 * 100) // 100MB
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// 获取上传文件
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
InputStream fileContent = filePart.getInputStream();
// 保存上传文件
Path uploads = Paths.get("uploads");
Path file = uploads.resolve(fileName);
try (InputStream input = fileContent; OutputStream output = Files.newOutputStream(file)) {
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
// 输出上传结果
response.getWriter().print("Upload completed!");
}
}
使用Java NIO的示例与使用javax.servlet.http.Part
接口的示例差别不大,主要是文件保存方式不同。Java NIO可以对文件进行更多高级操作,具体可以参考Java NIO的官方文档。
以上就是“javaWeb实现简单文件上传”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javaWeb实现简单文件上传 - Python技术站