写一个文件上传程序 java
时间: 2024-05-03 22:18:50 浏览: 119
以下是一个简单的 Java 文件上传程序,使用了 Apache Commons FileUpload 库:
```java
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 上传文件存储的目录
private static final String UPLOAD_DIRECTORY = "uploads";
// 上传文件配置的大小限制,单位为字节
private static final int MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
// 上传文件配置的请求大小限制,单位为字节
private static final int MAX_REQUEST_SIZE = 20 * 1024 * 1024; // 20MB
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 检查请求是否包含文件上传
if (!ServletFileUpload.isMultipartContent(request)) {
PrintWriter out = response.getWriter();
out.println("No file uploaded");
out.flush();
return;
}
// 创建文件上传工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存缓冲区大小,如果上传的文件大小超过该值,就会使用临时文件写入磁盘
factory.setSizeThreshold(4096);
// 设置存储临时文件的目录
String tempDir = System.getProperty("java.io.tmpdir");
factory.setRepository(new File(tempDir));
// 创建文件上传处理器
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的大小限制
upload.setFileSizeMax(MAX_FILE_SIZE);
upload.setSizeMax(MAX_REQUEST_SIZE);
// 设置字符编码
upload.setHeaderEncoding("UTF-8");
// 获取上传文件存储目录,如果不存在则创建
String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY;
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
try {
// 解析请求中的所有文件
List<FileItem> items = upload.parseRequest(request);
// 处理上传的文件
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
String filePath = uploadPath + File.separator + fileName;
File uploadedFile = new File(filePath);
// 将文件写入磁盘
item.write(uploadedFile);
// 响应客户端上传成功
PrintWriter out = response.getWriter();
out.println("File uploaded successfully");
out.flush();
}
}
} catch (Exception e) {
// 响应客户端上传失败
PrintWriter out = response.getWriter();
out.println("File upload failed");
out.flush();
}
}
}
```
在以上代码中,我们首先检查请求是否包含文件上传。如果是,我们创建一个文件上传工厂和一个文件上传处理器,并设置一些配置选项,例如文件大小限制和字符编码。然后,我们解析请求中的所有文件,并将它们写入上传文件存储目录中的文件。最后,我们向客户端发送一个响应,指示文件是否上传成功。
注意,以上代码仅仅是一个简单的示例,并未考虑安全性和错误处理。在实际应用中,我们需要采取更多的措施来确保文件上传的安全性和可靠性。
阅读全文