我想写一个通用的html模板。
我知道在过去,如果你想上传文件,你需要在<form>
标签中设置enctype="multipart/form-data"
。
我想在我的通用模板中避免这种情况。
我该怎么办?我看到了这些解决方案:
- 始终使用
enctype="multipart/form-data"
。 - 永远不要使用
enctype="multipart/form-data"
。
背景:我很幸运,我不需要支持旧的浏览器。我不需要支持IE9或更早的版本。
成功了
我们使用enctype="multipart/form-data"
几个月以来在所有形式(即使没有文件上传)。
它工作了。这使我们的模板更简单。对我来说,这是一个简单的步骤,以大目标“conditionlesscode”。
5条答案
按热度按时间wpx232ag1#
当在表单中上传文件时,您应该specify the encoding as "multipart/form-data"。
如果你想保持表单的通用性,可以在表单中省略这个属性,直接使用input或button元素的formenctype属性来覆盖它 (仅在支持HTML5的浏览器中可用)。在你的情况下,更改:
致:
此外,您可以检查this question,建议避免 * 总是 * 使用
enctype="multipart/form-data"
。yqkkidmi2#
我不能直接评论,所以我必须把它作为一个答案。
我所知道的唯一区别是在后端,如果后端使用PHP(没有线索,如果这影响Java/Python或任何其他语言中使用的后端除了PHP)。
如果PHP从
$_POST
和$_FILES
superglobals 获取数据,那么应该没有问题,您可以随时使用它,但如果您使用:$post_content = file_get_contents('php://input')
.据我所知,
$post_content
中的内容变成了空白,或者类似的东西(它可能适用于单个文件,但不能用于多个文件,不能正确记住......)。7hiiyaii3#
你可以用javascript
byqmnocz4#
我认为你应该选择use enctype=“multipart/form-data”always..因为它能够发送任何数据类型.但因为你不需要管理与旧浏览器的向后兼容性,那么你可以使用HTML5不仅是这个其他功能,也是你想要的通用模板.
您可以在此链接查看可用的HTML 5属性HTML5属性
支持的浏览器列表及其版本和示例可在此处获得:Example and supported browsers.
我建议你添加一个过滤器/拦截器,它将从请求中获取所有参数,并放入一些数据结构或通用函数,帮助他们从请求中提取值,这将有助于后端开发人员从请求中获取数据。
你也可以写一个javascript函数,它将在每个表单提交时被调用,并将请求提交给服务器,基于或属性或一些指定的格式,即使客户端浏览器较旧也能工作。
希望能帮上忙。
ymzxtsji5#
上传文件时,您总是需要在表单标签中使用
enctype=" multipart/form-data"
。但当您不上传任何文件时,就没有必要了。