java实现文件上传
时间: 2023-10-12 07:55:14 浏览: 103
要在Java中实现文件上传,可以使用Java的Servlet API和Apache Commons FileUpload库。以下是一个简单的示例代码:
首先,创建一个Servlet来处理文件上传:
```java
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
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 java.io.File;
import java.io.IOException;
import java.util.List;
@WebServlet("/upload")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
maxFileSize = 1024 * 1024 * 10, // 10MB
maxRequestSize = 1024 * 1024 * 50) // 50MB
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 检查是否为multipart/form-data表单
if (!ServletFileUpload.isMultipartContent(request)) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Request is not a multipart/form-data form.");
return;
}
// 创建一个DiskFileItemFactory对象,用于处理文件上传的临时文件
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置临时文件存储目录
String tempDir = System.getProperty("java.io.tmpdir");
factory.setRepository(new File(tempDir));
// 创建ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// 解析请求,获取所有文件项
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
// 如果是普通表单字段,则输出字段名和值
if (item.isFormField()) {
String fieldName = item.getFieldName();
String fieldValue = item.getString();
System.out.println(fieldName + ": " + fieldValue);
} else {
// 如果是文件字段,则保存文件到指定目录
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
long sizeInBytes = item.getSize();
// 保存文件到指定目录
String uploadDir = "C:/uploads"; // 修改为你希望保存文件的目录
File uploadFile = new File(uploadDir, fileName);
item.write(uploadFile);
System.out.println("Uploaded file: " + fileName + " (type: " + contentType + ", size: " + sizeInBytes + ")");
}
}
response.getWriter().println("File upload completed.");
} catch (Exception e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "An error occurred while processing the file upload.");
}
}
}
```
在上面的代码中,`@MultipartConfig`注解用于指定上传文件的配置,包括文件大小的阈值、最大文件大小和最大请求大小。
然后,将上述Servlet部署到你的Java Web应用程序中,并在Web应用程序的web.xml文件中配置Servlet映射。
最后,在前端页面中使用HTML的form元素来创建文件上传表单:
```html
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" /><br />
<input type="submit" value="Upload" />
</form>
```
上述代码创建了一个包含文件选择和上传按钮的表单。当用户选择文件并点击上传按钮时,表单将被提交到指定的Servlet(在这个例子中是`upload`)。
当文件上传成功后,Servlet将会打印出文件的名称、类型和大小信息,并将文件保存到指定的目录(在上述示例中是"C:/uploads")。
请注意,上述代码只是一个简单的示例,你可能需要根据自己的需求进行适当的调整和扩展。
阅读全文