Html 使用`enctype=";多部分/表单数据永远还是永远?

Html 使用`enctype=";多部分/表单数据永远还是永远?,html,forms,file-upload,browser,Html,Forms,File Upload,Browser,我想写一个通用的html模板 我知道,在过去,如果要上载文件,需要在标记中设置enctype=“multipart/form data” 我希望在我的通用模板中避免这种情况 我该怎么办?我看到这些解决方案: 始终使用enctype=“多部分/表单数据” 使用enctype=“多部分/表单数据”never 背景:我很幸运,我不需要支持旧的浏览器。我不需要支持IE9或更旧的版本 它正在工作 自几个月以来,我们一直在所有表单中使用enctype=“multipart/form data”(即使没有

我想写一个通用的html模板

我知道,在过去,如果要上载文件,需要在
标记中设置
enctype=“multipart/form data”

我希望在我的通用模板中避免这种情况

我该怎么办?我看到这些解决方案:

  • 始终使用
    enctype=“多部分/表单数据”
  • 使用
    enctype=“多部分/表单数据”
    never
背景:我很幸运,我不需要支持旧的浏览器。我不需要支持IE9或更旧的版本

它正在工作

自几个月以来,我们一直在所有表单中使用
enctype=“multipart/form data”
(即使没有要上传的文件)


它起作用了。这使我们的模板更简单。对我来说,这是实现“无条件代码”大目标的一个简单步骤。

我不能直接发表评论,所以我必须写下它作为答案

我所知道的唯一区别是后端是否使用PHP(不知道这是否会影响Java/Python或除PHP之外的后端使用的任何其他语言)

如果PHP从
$\u POST
$\u文件
超全局文件中获取数据,那么应该没有问题,您可以始终使用它,但如果您使用:

$post\u content=file\u get\u contents('php://input)


据我记忆所及,
$post\u content
中的内容变为空白,或类似内容(它可能适用于单个文件,但不适用于多个文件,无法正确记住…。

在表单中上载文件时,您应该

如果希望保持表单的通用性,请在表单中省略此属性,并使用输入或按钮元素直接覆盖它(仅在支持HTML5的浏览器中可能)。 在您的情况下,更改:

<form action="upload.php" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

选择要上载的图像:
致:


选择要上载的图像:

此外,您还可以检查建议您在上传文件时避免在表单标记中始终使用
enctype=“multipart/form data”

的位置。但当您不上传任何文件时,不需要使用此选项。
谢谢:)

快乐编码

您可以使用javascript来完成

var file = document.getElementById('file').files[0]; 
var reader = new FileReader();
reader.readAsText(file, 'UTF-8');
reader.onload = sendData;


function sendData(event) {
    var result = event.target.result;
    var fileName = document.getElementById('file').files[0].name; 
    $.post('/api/sendData', { data: result, name: fileName }, continueSubmission);
}

我认为您应该选择始终使用enctype=“multipart/form data”。。由于它能够发送任何数据类型。但由于您不需要管理与旧浏览器的向后兼容性,因此您可以使用HTML5,不仅可以实现此功能,还可以实现您希望在通用模板中实现的其他功能

您可以在此链接中查看可用的HTML5属性

此处提供了版本和示例支持的浏览器列表:

我建议您添加一个过滤器/拦截器,它将从请求中获取所有参数,并放入一些数据结构或一个通用函数,帮助他们从请求中提取值,这将帮助后端开发人员从请求中获取数据

<form>
     <input type=submit value=Submit formenctype="application/x-www-form-urlencoded">
 </form>

您还可以编写一个javascript函数,该函数将在每次表单提交时调用,并将请求提交到基于服务器的属性或某些指定格式,即使客户端浏览器较旧,这些格式也可以工作


我希望它能帮上忙。

使用它总是没有坏处。@Mr.Alien使用它总是没有坏处。美好的现代网络浏览器还需要它吗?我想是的。。很长一段时间没有使用表单上传,但提到多部分/表单数据明确表示您有一个文件上传字段。把它想象成一个网站,可以选择上传表单,但即使没有提供文件。。属性保持原样。因此,在所有表单上定义它没有坏处。这是一种永远不要在表单中使用
enctype=“multipart/form data”
的方法,这回答了他的问题。@Mr.Alien你认为我已经知道了吗?我知道一点,但不多。对我来说,可以为每个输入元素设置formenctype是一件新鲜事。好吧@guettli这是HTML5标准AFIK这个问题与语言无关。这是关于现代html的。谢谢你的回答。我的高层次目标是做得更少,而不是更多。但是你是对的,执行这个javascript代码片段可以解决不确定性(如果有人仍然不确定),你说“我建议你添加一个过滤器/拦截器,它将从请求中获取所有参数,并放入一些数据结构或通用函数,帮助他们从请求中提取值…”我使用web框架django。我看不出有什么区别(带或不带enctyp),只是看了看电线。框架处理这两种交换数据的方法。@guettli你说得对,但我写下这一点时不考虑技术/框架。在一些语言中,您需要显式地处理相同的问题,而在其他语言中/或者在框架中,它由框架本身巧妙地处理。但是在这种情况下,框架也在做我要求您显式做的事情。
<form>
     <input type=submit value=Submit formenctype="application/x-www-form-urlencoded">
 </form>