在Java中,可以使用Apache Commons FileUpload库来实现文件的上传,使用Java的IO流来实现文件的下载。
文件上传的步骤如下:
- 在HTML表单中,使用
enctype="multipart/form-data"
来指定表单支持文件上传。 - 在Java代码中,创建一个Servlet来接收文件上传请求。
- 使用Apache Commons FileUpload库的
ServletFileUpload
类来解析上传的文件数据。 - 遍历解析出的文件列表,使用
FileItem
对象的write
方法将文件写入磁盘。
以下是一个简单的文件上传的示例代码:
import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.FileItem; @WebServlet("/upload") public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 检查请求是否为文件上传 boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { response.getWriter().println("不是文件上传请求"); return; } // 创建文件上传工厂类和ServletFileUpload对象 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { // 解析上传的文件数据 Listitems = upload.parseRequest(request); for (FileItem item : items) { // 判断是否为普通表单字段 if (item.isFormField()) { String fieldName = item.getFieldName(); String fieldValue = https://www.yisu.com/ask/item.getString();"文件上传成功"); } catch (Exception e) { response.getWriter().println("文件上传失败: " + e.getMessage()); } } }
文件下载的步骤如下:
- 创建一个Servlet来处理文件下载请求。
- 在Servlet中,通过
ServletContext
对象获取要下载的文件路径。 - 使用Java的IO流读取文件内容,并将文件内容写入响应的输出流。
以下是一个简单的文件下载的示例代码:
@WebServlet("/download") public class FileDownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取要下载的文件路径 String filePath = getServletContext().getRealPath("/path/to/file"); // 设置响应的Content-Type和Content-Disposition头 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); // 读取文件内容并将内容写入响应的输出流 InputStream fileContent = new FileInputStream(filePath); OutputStream responseOutput = response.getOutputStream(); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = fileContent.read(buffer)) != -1) { responseOutput.write(buffer, 0, bytesRead); } fileContent.close(); responseOutput.close(); } }
请注意修改代码中的文件路径和文件名,以适应你的实际情况。