0
点赞
收藏
分享

微信扫一扫

Javaweb的文件上传

落拓尘嚣 2022-02-14 阅读 59

文件上传

文件上传通常以流的形式上传。

file.jsp(上传界面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传案例</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/fileUploadServlet" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="username">
    头像:<input type="file" name="img">
    <input type="submit" value="提交">

</form>
</body>
</html>

FileUploadServlet(上传文件处理代码)
注意代码第二行(@MultipartConfig)不能遗忘

@WebServlet("/fileUploadServlet")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String username= req.getParameter("name");

        Part part=req.getPart("img");
        
        String header=part.getHeader("content-disposition");
        System.out.println("header="+header);
        //前面有几位就加几位(文字裁剪处理)
        String realname=header.substring(header.indexOf("filename=")+10,header.length()-1);

        System.out.println("realname="+realname);

        //获取文件真实内容
        InputStream inputStream=part.getInputStream();

        //WEB-INF目录外界不能直接访问,如果文件机密性强则放这里
		//String dir=this.getServletContext().getRealPath("/WEB-INF/file");
        //将文件存入web文件下的file文件夹
        String dir=this.getServletContext().getRealPath("/file");

        File dirfile=new File(dir);
        //如果目录不存在则创建
        if (!dirfile.exists()){
            dirfile.mkdirs();//创建文件
        }

        //文件流拷贝
        File file=new File(dir,realname);

        FileOutputStream fileOutputStream=new FileOutputStream(file);

        byte[] buf=new byte[1024];
        int len;
        while ((len=inputStream.read(buf))!=-1){
            fileOutputStream.write(buf,0,len);
        }
        fileOutputStream.close();
        inputStream.close();

        req.getRequestDispatcher("/file/"+realname).forward(req,resp);
    }


}

截图:
上传界面
在这里插入图片描述
上传完成后
在这里插入图片描述
在这里插入图片描述

总结:

  1. 由servlet获取上传的文件对象Part
    Part part=req.getPart(“img”);

  2. 获取文件真实内容
    InputStream inputStream=part.getInputStream();

  3. 判断是否有存储的目录 没有则创建
    String dir=this.getServletContext().getRealPath("/file");
    File dirfile=new File(dir);
    //如果目录不存在则创建
    if (!dirfile.exists()){
    dirfile.mkdirs();//创建文件
    }

  4. 在文件夹中创建输出的文件,并将输出流定位到创建的文件
    File file=new File(dir,realname);
    FileOutputStream fileOutputStream=new FileOutputStream(file);

  5. 将文件输入流写入缓冲区,再将缓冲区的数据写入输出流中 byte[] buf=new byte[1024];
    int len;
    while ((len=inputStream.read(buf))!=-1){
    fileOutputStream.write(buf,0,len);
    }

  6. 关闭输入输出流
    fileOutputStream.close();
    inputStream.close();

举报

相关推荐

0 条评论