JavaWeb上传文件

这篇博客介绍了如何在JavaWeb中实现文件上传,利用Apache的commons-fileupload和commons-io组件简化流程。内容包括前期准备,如导入必要的jar包,设置文件上传的安全性和防止覆盖,限制文件大小和类型,并解决乱码问题。详细阐述了ServletFileUpload的使用,以及Servlet上下文的作用,并给出了上传成功后的页面跳转配置。
摘要由CSDN通过智能技术生成

JavaWeb—上传文件

前期准备

  • 我们一般通过流来获取上传的文件(request.getInputstream),但是原始的文件上传流的获取很麻烦,所以我在这里用Apache的文件上传组件来实现文件的上传

  • 我们需要准备两个jar包(下载最新的):

  • 在项目中导入jar包:(导完包记得修复路径)
    在这里插入图片描述

修复路径:
在这里插入图片描述

代码实现

  • 注意
    • 上传的文件应该放在WEB-INF目录下,用户 无法直接访问这个目录,可以保证服务器的安全
    • 为了防止同名覆盖情况出现,需要给上传的文件一个唯一的文件名
    • 需要限制上传文件的大小和类型
    • 注意乱码问题
    • 设置临时文件存储目录
  • 前端提交页面
    • form表单的method属性值应为post,因为get不能传送大数据的文件,而post没有上线,而且post相对更安全一些
    • form表单的enctype属性规定如何对表单数据进行编码,有三个值
      1.application/x-www-form-urlencoded—默认值
      2.multipart/form-data—当我们上传非文本的内容,比如图片、mp3和文件,用这个属性值
      3.text/plain—纯文本传输时,用这个值

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        body{
            background-color: antiquewhite;
        }
        p{

            color: darksalmon;
            font-size:30px;
        }
    </style>
</head>
<body>
    
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">

    <p>用户名:<input type="text" name="username"></p>
    <p>上传文件:<input type="file" name="file"></p>
    <p><input type="submit" value="提交"></p>

</form>

</body>
</html>
  • UploadServlet
    • ServletFileUpload类—用来处理上传的文件数据,将表单中的每个输入封装成一个FileItem对象
      • public void setSizeMax()—用来设置可以传送的文件的最大值
      • public void setFileSizeMax()—用来设置上传的单个文件的最大值
      • 创建ServletFileUpload对象时需要DiskFileItemFactory(创建FileItem 对象的工厂)对象
    • FileItem类
      • boolean isFormField()—判断FileItem类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段
      • String getName()—用于获得文件上传字段中的文件名
      • InputStream getInputStream()—以流的形式返回上传文件的数据内容
      • void delete()—主要用于删除临时文件
    • ServletContext(servlet上下文)
      运行在JAVA虚拟机中的每一个Web应用程序都有一个与之相关的Servlet上下文(一对一)。可以通过getServletContext方法获得ServletContext对象。一个WEB应用程序中的所有Servlet共享同一个ServletContext对象,ServletContext提供对应用程序中所有Servlet所共有的各种资源和功能的访问。
    package priv.sehun.servlet;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.ProgressListener;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.UUID;
    
    public class UploadServlet extends javax.servlet.http.HttpServlet {
         
        protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
         
           
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值