在Java中实现文件上传和下载的功能,可以使用Java的内置类库和一些第三方库,比如Apache Commons FileUpload。以下是一个简单的示例,展示如何使用Java实现文件上传和下载。
首先,这是一个简单的文件上传的示例:
import java.io.*;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (!ServletFileUpload.isMultipartContent(request)) {
throw new ServletException("Content type is not multipart/form-data");
}
try {
List<FileItem> formItems = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : formItems) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
String uploadDir = getServletContext().getRealPath("/") + File.separator + "uploads";
File uploadDirFile = new File(uploadDir);
if (!uploadDirFile.exists()) {
uploadDirFile.mkdir();
}
String filePath = uploadDir + File.separator + fileName;
File storeFile = new File(filePath);
item.write(storeFile);
}
}
} catch (Exception ex) {
request.setAttribute("message", "There was an error: " + ex.getMessage());
}
}
}
这个Servlet处理POST请求,并且检查请求的内容类型是否是multipart/form-data
,这是文件上传的标准内容类型。然后,它使用Apache Commons FileUpload库解析请求,获取所有的表单项。对于每一个不是表单字段的项(也就是文件),它获取文件名,创建一个上传目录(如果不存在),然后将文件保存到该目录。