问题记录:multipart/form-data 文件上传表单中传递参数无法获取

###前端代码

        <%--这里提交方式必须的post传输的数据量大,且enctype必须得下述:表单包含文件上传控件时必须使用--%>
        <form id="myfile" action="/uploadVideoServlet" method="post" enctype="multipart/form-data" class="f">
            <table class="table table-hover" align="center">
                <tr>
                    <td>上传者</td>
                    <input  id="uploader" name="uploader" type="hidden" value="${admin.adminname}">
                    <td><input type="text" value="${admin.adminname}" disabled="disabled" class="name"/></td>
                </tr>
                <tr>
                    <td>类型</td>
                    <td>
                        <input type="radio" name="type" value="1">弓弦乐器
                        <input type="radio" name="type" value="2">铜管乐器
                        <input type="radio" name="type" value="3">木管乐器
                        <input type="radio" name="type" value="4">弹拨乐器
                        <input type="radio" name="type" value="5">键盘乐器
                        <input type="radio" name="type" value="6">打击乐器
                    </td>
                </tr>
                <tr>
                    <td>上传文件</td>
                    <td><input type="file" name="myfile" class="show"/></td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" onclick="myupload()" value="点击上传" class="btn-info"/></td>
                </tr>
            </table>

###Servlet内

        //1、上传者
        String uploader = request.getParameter("uploader");
        //2、视频相关的乐器类型
        String type = request.getParameter("type");

通过这种方法获取的两个参数值均为空,通过查询资料得知,在使用enctype="multipart/form-data"后请求的请求体信息已经改变,不能直接通过getParameter是获取不到的.

先来看enctype属性:
enctype:规定了form表单在发送到服务器时候编码方式,它有如下的三个值。
①application/x-www-form-urlencoded:默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。
②multipart/form-data:指定传输数据为二进制类型,比如图片、mp3、文件。
③text/plain:纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

解决方法:

@MultipartConfig
//加上这个注解,反射该Servlet时才知道处理的是文件上传,同时解决了在multipart/form-data 文件上传表单中传递参数无法获取的问题!
public class UploadVideoServlet extends HttpServlet{
...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: content-type: multipart/form-data 是一种 HTTP 请求头部的格式,用于在 HTTP 请求传输二进制数据,例如上传文件。它允许将多个不同类型的数据一起发送到服务器,每个数据块都有自己的 MIME 类型和边界分隔符。这种格式通常用于表单提交和文件上传。 ### 回答2: content-type: multipart/form-data是HTTP协议的一个请求头字段,用于指定请求体的数据格式为多部分表单数据。该数据格式常用于上传文件等需要传递二进制数据的场景。 multipart/form-data数据格式的特点是将请求体数据划分为多个部分,每个部分都是一个独立的数据块,块之间用分隔符进行分隔。每个数据块都包含一个头部和一个内容部分。 头部是一个描述数据块的字符串,包含了元数据信息,如Content-Disposition和Content-Type等。其Content-Disposition常用于指定数据块的名称、文件名和传输方式。Content-Type常用于指定数据块的媒体类型。 内容部分是实际的数据内容,可以是文本、二进制等形式。对于文件上传,内容部分通常是二进制的文件数据。 通过使用multipart/form-data格式,客户端可以将多个不同类型的数据(例如文本表单字段和文件等)一同提交给服务器端。服务器端可以通过解析请求体数据,逐个读取和处理各个数据块,从而实现文件上传等功能。 总之,content-type: multipart/form-data是一种用于上传文件等二进制数据的HTTP请求数据格式,具有分块、包含元数据的特点,可以在客户端和服务器端传输多部分表单数据。 ### 回答3: content-type: multipart/form-data是HTTP协议的一种数据传输格式,主要用于在客户端和服务器之间传递带有文件上传表单数据。 在HTTP请求表单数据通常使用键值对的形式进行传输,例如key1=value1&key2=value2。然而,当表单包含文件上传时,使用这种形式无法传递文件数据。这时就需要使用multipart/form-data格式。 使用multipart/form-data格式时,请求体被划分为多个部分(part),每个部分包含一个表单字段或一个文件。每个部分使用boundary作为分隔符,用于区分不同的字段或文件。 对于每个表单字段,请求体的一部分将包含字段的键名和值。对于文件,请求体的一部分将包含字段的键名、文件名以及文件的二进制数据。值得注意的是,multipart/form-data格式不对文件进行任何编码或压缩,直接发送原始的二进制数据。 使用multipart/form-data格式时,请求头的Content-Type字段即为content-type: multipart/form-data,同时指定boundary参数来标识分隔符的字符串。 服务器端在接收到这样的请求后,可以解析请求体,提取其表单字段和文件数据,并进行相应的处理。常用的服务器端框架和编程语言都提供了处理这种格式的工具和库。 总之,content-type: multipart/form-data是一种用于在HTTP请求传递带文件上传表单数据的格式,在客户端和服务器之间进行数据传输时使用,以便实现文件上传功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值