美文网首页JAVA-WEB基础
文件上传(妈妈不用再担心了)

文件上传(妈妈不用再担心了)

作者: superNeil | 来源:发表于2020-05-19 09:27 被阅读0次

    文件上传

    1.文件上传

    概念 : 将本地磁盘中的文件 放到 服务器磁盘中 . ( 本地--服务器 )


    image-20200519071103563.png

    1.Servlet 获取到数据怎么做?

    答: 1. 接收请求数据 : 用户名(普通文本) ; 文件(二进制) --** 需要把二进制数据以文件方式保存到磁盘中,再把磁盘路径保存到数据库中 .

    1.1 准备 (register.jsp , 写表单)

    <body>
    ${msg}  <!--这里可以先不写 , 后面再写 , 这是为后面给用户提示用的哈-->
    <h3 style="color: crimson">文件上传模拟</h3>
    <form method="post" action="/register" enctype="multipart/form-data">
        <p>用户名: <input type="text" name="username"></p>
        <p>文件上传: <input type="file" name="headImg"></p>
        <input type="submit" value="提交">
    </form>
    </body>
    
    注意 :
    1. enctype(编码方式) enctype="multipart/form-data" 否则报下面这个错.

    multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。

    ​ 2.method 用 post . get会限制大小

    ​ 3.需要file控件

    1.2 Servlet3.0 文件上传 (十分简单 , 妈妈再也不用担心我学不会了)

    首先 我们先看一样要用到的 API ,不然一会很懵了的 .


    image-20200519074738052.png
    image-20200519075743190.png
    @WebServlet("/register")@MultipartConfig
    public class UploadServlet extends HttpServlet {
        //文件上传
        //细节:
        // 1.文件名覆盖问题--UUID来解决
        // 2.文件保存位置问题 servletContext上下文对象来,获取真实路径realPath("/upload")
        // 3.文件类型约束的问题
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置编码格式
            req.setCharacterEncoding("utf-8");
            //String username = req.getParameter("username");
            //System.out.println("用户名--"+username);
            //----------------------------------------
            //用于获取请求中指定的name文件----------获取指定的文件  headImg
            Part part = req.getPart("headImg");
            //--------------------------指定文件类型----------------------------------------------------------------------
            if(!part.getContentType().startsWith("image/")){
                req.setAttribute("msg","亲,请上传图片哦!");
                req.getRequestDispatcher("/register.jsp").forward(req,resp);
                return;
            }
            //--------------------------------------------------------------------------------------------------
            //获取文件名----------------------------getSubmittedFileName()
            String FileName = part.getSubmittedFileName();
            //System.out.println(FileName);//cookie.jpg
            //--------------------------------------获取  拓展名
            String substring = FileName.substring(FileName.lastIndexOf("."));//.jpg  拓展名   substring 截取
            //--------------------------------------UUID + 拓展名   (唯一的字符串)  作为文件名,
            String fileName=UUID.randomUUID()+substring;
            //获取相对 web 根路径的绝对路径  (*****看看看*****)
            String realPath = getServletContext().getRealPath("/upload");
            part.write(realPath+"/"+fileName);//上传到 ----
        }
    
    记得: 需要给Servlet 贴注解 @MultipartConfig

    注意 : @MultipartConfig主要用来指明servlet的请求当中包含文件,文件我们通过以下的方式获取:
    Part part = req.getPart("filename");

    注意: 无法获取项目下的("/upload")目录 :

    原因是idea 工具使用打包web项目(war)的方式来部署,所以位置可能稍有偏差,需要还原web项目的原本目录结构,以及调整部署方式 .

    image-20200519091226532.png image-20200519091305182.png image-20200519091413283.png

    这样 , 文件上传也就搞定啦!

    相关文章

      网友评论

        本文标题:文件上传(妈妈不用再担心了)

        本文链接:https://www.haomeiwen.com/subject/radvohtx.html