HTML5 文件输入的文件扩展名行为不一致


inconsistant file extension behavior for HTML5 file input

我正在尝试制作本地主机文件上传程序,以便我可以将文件从手机上传到桌面,但是HTML5文件输入控件出现问题。

以下是演示该问题的代码:

<!DOCTYPE html>
<html>
  <head>
    <title>File Input Problem Demo</title>
    <script>
let hFileInput = null;    
function performSetup() {
    hFileInput = document.getElementById('fileInput');
}    
function showFilename() {
    alert(hFileInput.value);
}    
    </script>
  </head>
  <body onload="performSetup()">
    <input id="fileInput" type="file"></input>
    <br />
    <button onclick="showFilename()">show filename</button>
  </body>
</html>
在我的

手机上,当我将文件输入到文件输入中并单击按钮时,它会显示不带扩展名的文件名,而在我的主/主机/主机上,当我按下按钮时,它会显示完整的文件名,包括扩展名

这反过来又使我的 php 上传脚本出错,因为它无法找出上传的文件具有的扩展名。

有人可以解释一下这种行为以及我如何使其行为更一致吗?

某些文件选择器在选择文件时会省略文件扩展名。这意味着文件选择器不会向文件输入元素提供文件扩展名信息,这反过来意味着上传文件时没有扩展名。

处理这种情况的最简单方法是创建一个警告,当用户选择没有扩展名信息的文件时,该警告会显示,让他们知道他们的文件选择器可能省略了扩展名,以便他们使用另一个文件选择器(手机/平板电脑通常允许您选择要选择文件的应用程序, 而Windows通常只有一个标准的选择对话框)。

此问题可通过让用户使用不省略扩展名的文件选择器来解决(音乐选择器通常省略扩展名,视频选择器和照片选择器也是如此,而通用文件选择器倾向于保留扩展名)。