html 总是使用`enctype=“multipart/form-data”`还是从不使用?

vc9ivgsu  于 2023-03-27  发布在  其他
关注(0)|答案(5)|浏览(169)

我想写一个通用的html模板。
我知道在过去,如果你想上传文件,你需要在<form>标签中设置enctype="multipart/form-data"
我想在我的通用模板中避免这种情况。
我该怎么办?我看到了这些解决方案:

  • 始终使用enctype="multipart/form-data"
  • 永远不要使用enctype="multipart/form-data"

背景:我很幸运,我不需要支持旧的浏览器。我不需要支持IE9或更早的版本。

成功了

我们使用enctype="multipart/form-data"几个月以来在所有形式(即使没有文件上传)。
它工作了。这使我们的模板更简单。对我来说,这是一个简单的步骤,以大目标“conditionlesscode”。

wpx232ag

wpx232ag1#

当在表单中上传文件时,您应该specify the encoding as "multipart/form-data"
如果你想保持表单的通用性,可以在表单中省略这个属性,直接使用input或button元素的formenctype属性来覆盖它 (仅在支持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>

致:

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

此外,您可以检查this question,建议避免 * 总是 * 使用enctype="multipart/form-data"

yqkkidmi

yqkkidmi2#

我不能直接评论,所以我必须把它作为一个答案。
我所知道的唯一区别是在后端,如果后端使用PHP(没有线索,如果这影响Java/Python或任何其他语言中使用的后端除了PHP)。
如果PHP从$_POST$_FILESsuperglobals 获取数据,那么应该没有问题,您可以随时使用它,但如果您使用:
$post_content = file_get_contents('php://input') .
据我所知,$post_content中的内容变成了空白,或者类似的东西(它可能适用于单个文件,但不能用于多个文件,不能正确记住......)。

7hiiyaii

7hiiyaii3#

你可以用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);
}
byqmnocz

byqmnocz4#

我认为你应该选择use enctype=“multipart/form-data”always..因为它能够发送任何数据类型.但因为你不需要管理与旧浏览器的向后兼容性,那么你可以使用HTML5不仅是这个其他功能,也是你想要的通用模板.
您可以在此链接查看可用的HTML 5属性HTML5属性
支持的浏览器列表及其版本和示例可在此处获得:Example and supported browsers.
我建议你添加一个过滤器/拦截器,它将从请求中获取所有参数,并放入一些数据结构或通用函数,帮助他们从请求中提取值,这将有助于后端开发人员从请求中获取数据。

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

你也可以写一个javascript函数,它将在每个表单提交时被调用,并将请求提交给服务器,基于或属性或一些指定的格式,即使客户端浏览器较旧也能工作。
希望能帮上忙。

ymzxtsji

ymzxtsji5#

上传文件时,您总是需要在表单标签中使用enctype=" multipart/form-data"。但当您不上传任何文件时,就没有必要了。

相关问题