Servlet文件上传

<form action="s6" enctype="multipart/form-data" method="post">
    姓名<input type="text" name="username"> <br>
    头像<input type="file" name="photo">
    <button>提交</button>
</form>

文件上传需要将form表单的enctype属性设置为multipart/form-data,
此时发送网络请求时的请求头中的content-type就是multipart/form-data,该内容类型会将请求提交的数据,以多段的形式进行拼接(每一个表单项就是一段),然后以二进制流的形式发送给服务器。

  • content-Type如下图:
    在这里插入图片描述
    其中 boundary=-------------------------25637493772594131407875886362 表示每一段的分隔符是-------------------------25637493772594131407875886362。
    我们再看下提交的数据
    在这里插入图片描述
    此时看到请求体中的数据,确实被这个指定的分割线分开了,而且每一段都有参数名信息和参数值(两者用空行分开)。

此时如果用request.getParameter(“username”)是获取不到的。因为所有数据都在request.getInputStream中。

  • 通过输入流获取
        /**
         * 由于客户端的内容类型为 multipart/form-data,所以请求中的数据为二进制流,
         * 用这种方式是获取不到参数的
         */
//        System.out.println(req.getParameter("username"));
//        System.out.println(req.getParameter("photo"));

        ServletInputStream inputStream = req.getInputStream();
        byte[] bytes = new byte[1024];
        int read = inputStream.read(bytes);
        System.out.println(new String(bytes,0,read));

        System.out.println("文件上传请求");

在这里插入图片描述
发现解析出来的字符串是和上传时请求体中的内容是一致的。
再将这个字符串解析出我们想要的数据。这里可以使用第三方类库解析 commons-io 和 commons-fileupload。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值