上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然。那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢?
其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x-www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可选:
①application/x-www-form-urlencoded (默认值)
②multipart/form-data
③text/plain
其中①application/x-www-form-urlencoded是默认值,大家可能在AJAX里见过这个:xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 这两个要做的是同一件事情,就是设置表单传输的编码。在AJAX里不写有可能会报错,但是在HTML的form表单里是可以不写enctype="application/x-www-form-urlencoded"的,因为默认HTML表单就是这种传输编码类型。而②multipart-form-data是用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或者mp3等等。③text/plain是纯文本传输的意思,在发送邮件时要设置这种编码类型,否则会出现接收时编码混乱的问题,网络上经常拿text/plain和text/html做比较,其实这两个很好区分,前者用来传输纯文本文件,后者则是传递html代码的编码类型,在发送头文件时才用得上。①和③都不能用于上传文件,只有multipart/form-data才能完整的传递文件数据。
上面提到的MIME,它的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。
简单说,MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
浏览器接收到文件后,会进入插件系统进行查找,查找出哪种插件可以识别读取接收到的文件。如果浏览器不清楚调用哪种插件系统,它可能会告诉用户缺少某插件,或者直接选择某现有插件来试图读取接收到的文件,后者可能会导致系统的崩溃。传输的信息中缺少MIME标识可能导致的情况很难估计,因为某些计算机系统可能不会出现什么故障,但某些计算机可能就会因此而崩溃。
检查一个服务器是否正确设置了MIME类型的步骤是:
1. 在Netscape浏览器中打开服务器网页
2. 进入"View"菜单,选择"Page Info"
3. 在弹出的窗口中点击上层框架中的"EMBED"
4. 在下层框架中查看MIME的类型是否为"application/x-director"或"application/x-shockwave-flash",如果是上述信息的话表明服务器已经正确设置了MIME类型;而如果MIME类型列出的是文本内容、八位一组的数据或是其它形式均表明服务器的MIME类型没有设置正确。
如果服务器没有正确标明其发送的数据的类型,服务器管理员应该正确添加相关信息,具体操作方法非常简单快捷。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzip,x-tar等。事实上这些类型运用的很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。
分享到:
相关推荐
1. **HTML表单与文件上传**:在HTML中,要上传文件,表单的`enctype`属性必须设置为`multipart/form-data`。这样做的原因是,普通表单数据(如文本字段)是以URL编码的方式发送的,但文件数据需要更复杂的编码方式以...
在Java Web开发中,表单上传是常见的功能之一,尤其是当用户需要上传多个文件时。本文将详细讲解如何实现这个功能,主要涉及HTML表单、Servlet、MVC框架(如Spring MVC)以及文件处理的相关知识。 1. HTML表单设置...
注意`enctype`属性设置为`multipart/form-data`,这是为了支持文件上传。 #### 2. 错误页面(error.jsp) ```jsp 错误 An Error has occurred in this application. ``` 当上传失败时,会跳转到此页面显示...
一个简单的文件上传表单通常包含`<form>`标签,用于定义一个表单区域,以及`<input>`标签,其`type`属性设置为`file`,让用户选择本地文件。例如: ```html <form action="upload.php" method="post" enctype=...
"表单文件上传(更新)"这个主题涉及到的技术点主要包括单文件上传、多文件上传、大文件上传以及进度条显示,这些都是提升用户体验的关键要素。 首先,**单文件上传**是指用户可以通过网页表单选择一个文件进行上传。...
在网页开发中,表单处理和文件上传是两个非常重要的概念。它们允许用户输入数据并与服务器进行交互,尤其是在处理用户提交的数据或者上传文件时。本文将深入探讨这两个主题,以便帮助开发者更好地理解和应用。 首先...
这里,`action`属性指向了Servlet的URL,`enctype`属性设置为`multipart/form-data`,以支持文件上传。 此外,为了安全和性能考虑,我们通常会进行一些额外的检查,如限制上传文件的大小、检查文件类型等。在实际...
在本文中,我们将深入探讨如何通过模拟POST表单上传文件到服务器,这是一项常见的任务,尤其在开发Web应用程序时。我们将涵盖客户端如何构建请求以及服务器如何接收和处理这些请求。 首先,让我们理解POST请求的...
传统的文件上传通常依赖于`<form>`元素,该元素的`enctype`属性设置为`multipart/form-data`,然后通过`<input type="file">`让用户选择文件。然而,这种方式会导致页面刷新,用户体验不佳。Ajax则通过创建...
在HTML中,创建一个支持文件上传的表单,需要设置`enctype`属性为`multipart/form-data`。例如: ```html <form action="uploadServlet" method="post" enctype="multipart/form-data"> ``` 这里,`...
在本文中,我们将深入探讨如何使用`...在创建多表单域上传的HTML表单时,我们需要设置`enctype`属性为`multipart/form-data`,这使得浏览器能够将表单数据分割成多个部分,每个部分对应一个表单域。例如: ```html ...
开发文件上传表单页面 在实现文件上传时,首先需要设置文件上传表单,这个表单的提交方式必须为POST。另外,还需要增加上传的属性enctype= “multipart/form-data”,该属性说明浏览器可以提供文件上传功能。 2.编写...
表单的`enctype`属性必须设置为`multipart/form-data`,这样才能允许文件上传。例如: ```html <form action="uploadServlet" method="post" enctype="multipart/form-data"> <!-- 表单元素 --> ``` 2. **...
在HTML页面中,创建一个包含`enctype="multipart/form-data"`属性的表单,然后添加一个或多个`<input type="file">`字段,让用户可以选择要上传的文件。 5. **控制器处理文件上传**: 在SpringMVC的控制器类中,...
表单的`enctype`属性必须设置为`multipart/form-data`,因为这是上传文件所必需的: ```html <form id="uploadForm" action="upload.jsp" method="post" enctype="multipart/form-data"> 请输入姓名" /> <!-- ...
2. 在文件上传时,需要将表单的提交方法设置为 POST,并设置表单的 enctype 属性值为“multipart/form-data”,以便服务器端可以正确地处理文件上传。 3. Apache 的 Commons FileUpload 组件是一个非常流行的选择,...
同时,我们还需要设置form表单的enctype属性为multipart/form-data,以便能够上传文件。 二、过滤器解决中文乱码问题 在上传文件时,中文乱码问题是一个常见的问题。为了解决这个问题,我们可以使用过滤器来设置...
2. 创建一个`<form>`元素,设置`enctype="multipart/form-data"`以支持文件上传,`target`属性设置为`iframe`的`name`,确保表单提交到`iframe`。 3. 使用JavaScript监听`<iframe>`的`load`事件,当`iframe`加载完成...
在这个例子中,`name="files"`的`input`元素允许用户选择多个文件,`multiple`属性表示可以同时上传多个文件。 在Struts2的动作类(Action)中,你需要创建一个List类型的属性来接收这些文件。例如: ```java ...
在表单上传中,我们需要在JSP页面上创建一个`<form>`元素,设置`enctype`属性为`multipart/form-data`,以支持文件上传。此外,还需要一个文件输入字段`<input type="file">`供用户选择要上传的Excel文件。同时,...