一文读懂Java怎么实现文件上传到文件夹_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 一文读懂Java怎么实现文件上传到文件夹

一文读懂Java怎么实现文件上传到文件夹

更新时间:2022-05-17 11:21:49 来源:极悦 浏览1468次

文件在每种编程语言中都起着至关重要的作用。为了使用 File,每个开发人员都应该了解如何用 Java 或其他编程语言实现文件上传功能。

在本节中,我们将了解如何在 Java 中实现文件上传功能,还将了解如何将文件上传到文件夹。

在Java中,我们使用单个servlet和HTML表单来创建对 servlet 的文件上传请求。我们实现了一个简单的HTML表单,它有两个字段,即 File 和 Destination。文件类型的输入字段允许用户从系统浏览文件。从系统中选择文件后,我们将文件作为 POST 请求发送到服务器。我们为表单添加了两个限制,即encrypt="multipart/form-data"和method="POST"。

有了这个限制,请求以编码形式发送到服务器。servlet 处理 POST 请求,处理传入的文件数据,并从流中提取 File。目的地定义了我们需要在系统中保存文件的位置的路径。数据被发布到 servlet,当我们单击 Upload 按钮时,它将文件存储到指定位置。

HTML表单的代码如下:

索引.html

<!DOCTYPE html>  
<html lang= "en" >  
    <头部>  
        <title>Servlet 文件上传示例</title>  
        <meta http-equiv= "Content-Type"  content= "text/html; charset=UTF-8" >  
    </head>  
    <正文>  
    <form method= "POST"  action= "uploadFile"  enctype= "multipart/form-data"  >  
            文件:  
            <输入类型= “文件” 名称= “文件”  ID= “文件”  />  
    <br/>  
    <br/>  
            目的地:  
            <输入类型= “文本” 值= “/javaTpoint” 名称= “目标” />  
            <br/>  
    <br/>  
            <输入类型= “提交” 值= “上传” 名称= “上传”  id= “上传”  />  
        </form>  
    </正文>  
</html> 

输出:

POST 和 GET 是我们在提交表单时可以使用的两种方法。在这里,当我们提交表单时,浏览器通过组合所有部分来流式传输内容。每个部分都定义了表单的字段。

@WebServlet (name =  " FileUploadServletExample " , urlPatterns = { "/upload" })  
@MultipartConfig  
公共类 FileUploadServletExample 扩展 HttpServlet {   
    私有最终静态 记录器 LOGGER =     
            Logger.getLogger(FileUploadServlet.class .getCanonicalName ()); 

在上面的代码中,我们使用了两个注解,即具有属性 name 和 urlPatterns 的@WebServlet和@MultipartConfig。

@WebServlet 和 @MultipartConfig 注释用于定义 servlet 映射并指示 servlet 期望分别使用 multipart/form-data MIME 类型发出的请求。

servlet 执行以下步骤将文件数据存储到目标文件夹中:

servlet的saveFileToFolder方法从请求中检索位置和文件。

之后,它通过使用getFileName()从文件部分获取文件的名称

Servlet 创建FileOutputStream类的实例,并通过使用它,将 File 存储到指定位置。

try 部分处理将 File 存储到指定位置的代码,catch 部分处理无法存储 File 的过程的错误。

FileUploadServletExample.java

@WebServlet (name =  " FileUploadServletExample " , urlPatterns = { "/upload" })  
@MultipartConfig  
公共类 FileUploadServletExample 扩展 HttpServlet {   
    private final static  Logger LOGGER = Logger.getLogger(FileUploadServlet.class .getCanonicalName ());      
    protected void  processRequest(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {   
        response.setContentType( "text/html;charset=UTF-8" );    
        // 创建用于保存文件的路径组件  
        final  String path = request.getParameter( "destination" );  
        final  Part filePart = request.getPart( "file" );  
        最终 字符串文件名 = getFileName(filePart);            
        // 声明 OutputStream、InputStream 和 PrintWriter 类的实例  
        输出流 otpStream =  null ;  
        输入流 iptStream =  null ;  
        最后 的 PrintWriter writer = response.getWriter();            
        // try 部分处理将文件存储到指定位置的代码  
        试试 {  
            // 初始化 OutputStream 和 InputStream 类的实例  
            otpStream =  new  FileOutputStream( new  File(path + File.separator + fileName));  
            iptStream = filePart.getInputStream();    
            int 读取 =  0 ;                
            // 初始化字节数组用于存储文件数据  
            最终字节[]字节= 新字节[ 1024 ];                  
            // 使用 while 循环使用 iptStream 从文件中读取数据,并使用 writer 和 otpStream 写入目标文件夹  
            而 ((读取= iptStream.read(字节))!= - 1 ){  
                otpStream.write(字节,  0 ,读取);  
            }  
            writer.println( "新文件"  +文件名+  "创建于"  +路径);  
            LOGGER.log(Level.INFO,  "文件{0}上传到 {1}" ,  new  Object[]{fileName, path});  
        }  
        // catch 部分处理错误   
        捕捉 (FileNotFoundException fne){  
            writer.println( "您要么没有指定要上传的文件,要么正在尝试将文件上传到受保护或不存在的位置。" );  
            writer.println( "<br/>错误:"  + fne.getMessage());  
            LOGGER.log(Level.SEVERE,  "文件上传时出现问题。错误:{0}" ,  new  Object[]{fne.getMessage()});  
        }  
        // finally 部分将关闭所有打开的类  
        最后 {  
            如果 (otpStream!=  null ){  
                otpStream.close();  
            }  
            如果 (iptStream!=  null ){  
                iptStream.close();  
            }  
            如果 (作家!=  null ){  
                writer.close();  
            }  
        }  
    }  
    // getFileName() 方法从部件中获取文件名  
    私人 字符串getFileName(最后 一部分){  
        // 从部件中获取 header(content-disposition)  
        final  String partHeader = part.getHeader( "content-disposition" );  
        LOGGER.log(Level.INFO,  "Part Header = {0}" , partHeader);            
        // 从头部获取文件名的代码  
        for  (字符串内容:part.getHeader(“内容处置” ).split(“;” )){  
            if  (content.trim().startsWith( "文件名" )) {  
                返回 content.substring(content.indexOf( '=' ) +  1 ).trim().replace( "\"" ,  "" );  
            }  
        }  
        // 没有在头部获取文件名时返回null   
        返回空值;   
    }  
}  

为了构建、打包、部署和运行文件上传程序,我们可以使用 NetBeans、Eclipse 或 Ant。对于 NetBeans,我们使用以下步骤:

从文件中选择打开项目它会打开项目对话框。

从Open Project 对话框中,我们导航到tut-install/examples/web/

从该目录中,我们选择 fileupload 文件夹。

我们选中Open as Main Project复选框,然后单击Open Project

在 Projects 选项卡中,右键单击 fileupload 并选择 Deploy。

现在,我们导航到浏览器并输入以下 URL:

http://localhost:8080/fileupload/

输入 URL 并按回车键后,将打开我们在上面创建的 HTML 表单。我们浏览系统并选择一个文件将其上传到所需位置。在目标字段中,我们输入需要存储该文件的目录的路径。该目录应该已经在系统中创建并且必须是可写的。如果我们没有为目标字段设置任何内容并单击上传按钮,它将引发异常。

当我们点击上传按钮时,一个 POST 请求发送到 servlet,它会将文件复制到目标文件夹。

单击上传按钮后,我们进入指定目录并验证上传的文件是否存在。

以上就是关于“一文读懂Java怎么实现文件上传到文件夹”的介绍,大家如果想了解更多相关知识,不妨来关注一下极悦的Java极悦在线学习,里面的课程内容从入门到精通,细致全面,很适合没有基础的小伙伴学习,相信对大家会有所帮助的。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>