java实现文件上传



在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库解析请求,获取所有的表单项。对于每一个不是表单字段的项(也就是文件),它获取文件名,创建一个上传目录(如果不存在),然后将文件保存到该目录。