首页 > 其他分享 >form表单中的enctype属性

form表单中的enctype属性

时间:2024-05-22 11:56:37浏览次数:13  
标签:编码 www form 表单 application enctype

form表单中的enctype属性

enctype就是encodetype就是编码类型的意思。

enctype:规定了form表单在发送到服务器时的编码方式,有如下的三个值。

application/x-www-form-urlencoded:默认的编码方式。只能上传文本格式的文件。不能用于发送文件。在发送前会编码所有字符,即在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,"+"加号转换为空格,特殊符号转换为 ASCII HEX 值)
multipart/form-data:指定传输数据为二进制类型,比如图片,mp3,文件。是将文件以二进制的形式上传,可以实现多种类型的文件上传。不对字符编码,使用包含文件上传控件的表单,必须使用此值
text/plain:纯文本的传输。空格转换为"+"号,但不对特殊字符编码,一般用于email之类的。不能用于发送文件
3.乱码问题
若使用出现"+"加号转为空格或其它乱码现象,则可检查前端或后台的程序,尝试使用java.net.URLEncoder.encode(value, "UTF-8")对value值进行加密或者使用java.net.URLDecoder.decode(value, "UTF-8")对value值进行解密。


一、application/x-www-form-urlencoded

这是form表单默认的编码格式。当我们没有在form表单中设置 enctype 属性时,它就是默认采用 application/x-www-form-urlencoded 这种编码格式的。application/x-www-form-urlencoded 会将表单中需要发送的数据编码为 "名称/键值" 的形式,这是标准的编码格式。当表单的 method 为 post 请求时,浏览器会将 form 数据封装到 http body 中,然后发送到服务器端;当表单的 method 为 get 请求时,application/x-www-form-urlencoded会将表单的数据拼接为一个字符串(name=coderbolg&key=php),将这个字符串拼接到 url后面,并用 ?分割,随后请求这个新的url。
当我们想要使用 Ajax 像form 表单提交数据那样使用POST请求,就需要设置 请求头为 application/x-www-form-urlencoded 的编码类型,不然服务器端接收不到数据。

    // 设置属性
    xhr.open('post', '02.post.php');

    // 如果想要使用post提交数据,必须添加此行
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    // 将数据通过send方法传递
    xhr.send('name=fox&age=18');

二、multipart/form-data

这个是专门用来传输特殊数据类型的,如mp3、图片等。这种编码方式不对字符进行编码,数据是通过二进制的形式传送到服务器端的,这时如果用 request 是无法获取到相应表单的值的,应该使用 stream流数据,将传送到服务器端的二进制数据解码,从而读取数据。

form表单代码:

<form action="uploadImage" method="post" enctype="multipart/form-data">
        文件编号:<input name="serialNo"><br>
        上传图片:<input type="file" name="image" accept="/image" ><br>
        <input type="submit" value="上传">
</form>

springMVC中,服务器端获取数据时,可以直接获取相应的表单值,也可以将其封装到自定义对象中一并获取。

 @RequestMapping("/uploadImage")
    public ModelAndView uploadImage(HttpServletRequest request, MultipartFile image,String serialNo) {

    }

或将表单中的各值封装到自定义对象 UploadImageFile 中:

public class UploadImageFile {
    private String serialNo;
    private MultipartFile image;
}

    @RequestMapping("/uploadImage")
    public ModelAndView uploadImage(HttpServletRequest request, UploadImageFile imageFile) {

    }

三、text/plain

数据以纯文本方的式编码,其中不包含任何的附件或格式字符。

以上两种方式在服务器端接收数据时都可以采用 request.getParameter(参数名); 方式,但是当定义enctype为text/plain时,则使用以下方式接收数据

 @RequestMapping("/uploadImage")
    public ModelAndView uploadImage(HttpServletRequest request) {
        
        try {
            BufferedReader reader = request.getReader();
            char[] buf = new char[512];
            int len = 0;
            StringBuffer nameStr = new StringBuffer();
            
            while((len = reader.read(buf)) != -1) {
                nameStr.append(buf, 0, len);
            }
            
            String name = nameStr.toString();
            if(name == null) {
                name = "";
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

来源:

form表单中的enctype属性 - 哩个啷个波 - 博客园 (cnblogs.com)

https://www.cnblogs.com/javaxubo/p/16536915.html

 

标签:编码,www,form,表单,application,enctype
From: https://www.cnblogs.com/zhaoyongqi/p/18205941

相关文章

  • [转帖]Running on a 64-bit Platform and Still Running Out of memory?
    https://poonamparhar.github.io/out_of_memory_on_64_bit_platform/ Itsoundsstrangethatwemightrunoutofnativememoryevenwhilerunningona64-bitplatform.Ona64-bitmachineandwhilerunningwitha64-bitJVM,wegetalmostunlimitedmemory,......
  • Detection of Platform Module failed: 没有检测到有效的 Platform ID
    问题描述:DetectionofPlatformModulefailed:没有检测到有效的PlatformID华为欧拉系统搭建本地yum源,执行dnfmakecache后,报错”DetectionofPlatformModulefailed:没有检测到有效的PlatformID“这个问题通常出现在尝试使用YUM进行软件包管理时,特别是在华为的欧拉(Eule......
  • rabbitMq的status报错Error: unable to perform an operation on node ‘rabbit……
    遇到下图这个错大部分问题可能是由于 RabbitMQ CLI工具的ErlangCookie与服务器上的不匹配而导致连接问题。ErlangCookie在RabbitMQ节点之间进行身份验证和安全通信时起着重要作用。可以在c盘搜索一下看下两个.erlang.cookie文件中的内容是否一致,不一致的话就改成一致的......
  • Restormer Efficient Transformer for High-Resolution Image Restoration——2022CVP
    大佬链接:Restormer:EfficientTransformerforHigh-ResolutionImageRestoration-知乎(zhihu.com)一.Motivation1.CNN感受野有限,因此无法对长距离像素相关性进行建模;卷积滤波器在推理时具有静态权重,因此不能灵活地适应输入内容2.Transformer模型缓解了CNN的缺点(有限的感......
  • 论文阅读:Multi-Grained Dependency Graph Neural Network for Chinese Open Informati
    LyuZ,ShiK,LiX,etal.Multi-graineddependencygraphneuralnetworkforChineseopeninformationextraction[C]//Pacific-AsiaConferenceonKnowledgeDiscoveryandDataMining.Cham:SpringerInternationalPublishing,2021:155-167.MGD-GNN开源代码引言......
  • FormCreate中在事件中获取api
    form-create中在事件中获取apiFormCreate是一个可以通过JSON生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持5个UI框架,并且支持生成任何Vue组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定FormCreate官网:https://www.form-create.com......
  • form-create-designer中怎么扩展自定义组件
    form-create-designer中怎么扩展自定义组件form-create-designer是基于 @form-create/element-ui实现的表单设计器组件。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。FormCreate官网:https://www.form-create.com帮助文档:https://pro.form-cr......
  • .net8 winform程序使用EntityFrameworkCore连接数据库
    在.NET8WinForms应用程序中使用EntityFramework(EF)Core,你需要按照以下步骤操作:1.添加EntityFrameworkCoreNuGet包。2.定义你的数据模型。3.创建数据库上下文(DbContext)。4.在数据库上下文中配置EntityFramework。5.使用EntityFrameworkCore的API来执行数据库操作。......
  • C# webform 在aspx页面调用aspx.cs页面的方法
    前台代码--调用后台的GetEcharts1方法,并传入三个参数startDateValue,ipEndDate,ddlTypeValue<inputtype="button"id="loadExce2l"value="查看"onclick="loadEcharts()"/>functionloadEcharts(){console.log(19999999999)......
  • winform开发excel
         Excel的二次开发方法有很多,下面主要介绍一个asponse.cell的使用方法,通过winform制造excel的小软件进行处理excel。 软件主要功能是先检查三个表中数据是否正确,比如是表头及列头等,然后将切割表和材料的数据进行组合,存放到数据跟踪表里。下面是加载到内存过程  ......