【问题标题】:Limit file name before uploading to server in PHP, HTML and Javascript在以 PHP、HTML 和 Javascript 上传到服务器之前限制文件名
【发布时间】:2017-11-10 22:27:34
【问题描述】:

我在上一个问题中搜索过,但大多数答案只是修剪文件名。但对我来说,我想在用户的文件名长度超过一定数量时向用户显示一条警告消息。

假设我有一个文件上传输入框:

<input type="file" name="userfile" id="userfile" accept="image/jpeg, application/pdf">

当用户上传文件时,一个函数会检测或计算文件名的长度。如果我将长度限制为15,用户只能上传包含扩展名的15个字符名称文件,如mickymouse.jpg,否则如果超过这个数字,则显示警告消息。

我不知道如何在 JavaScript 中做到这一点。感谢您的帮助,非常感谢。

【问题讨论】:

  • 你为什么要关心文件叫什么?上传文件的人应该能够在自己的机器上随意命名,是吗?您实际上并没有将用户提供的文件名保存在您自己的服务器上,是吗?
  • 需求的目的是什么?
  • 因为如果我在我的网页中显示文件名,如果它太长,它会破坏我的网页设计。显示长度太长,弄乱了页面格式
  • @JackyX。显示时为什么不缩短它?即把super-duper-long-file-name.jpg变成super-du...jpg?
  • 我也不知道要写那个代码,因为我的情况就像 while($row = mysqli_fetch_assoc($result)) { {$row['file_name']} } 我应该如何修剪文件名?

标签: javascript php html


【解决方案1】:

您可以为此使用File.name Web API。

为此,您需要将onchange 事件添加到您的输入字段,然后创建一个javascript 函数来捕获该事件。在该函数中,您将访问所选文件的名称并执行验证。例如:

<input
    type="file" name="userfile" id="userfile"
    accept="image/jpeg, application/pdf"
    onchange="validateFile(this)"
/>

<script>
    function validateFile(fileInput) {
        var files = fileInput.files;
        if (files.length === 0) {
            return;
        }

        var fileName = files[0].name;
        if (fileName.length > 15) {
            alert('File input name to long.');
        }
    }
</script>

值得注意的是,出于安全原因,您应该使用用户提供的名称存储文件。将其存储在数据库中并在显示用户时用作标签是安全的(等待您先对其进行清理) - 但您保存在服务器上的文件路径应该 100% 由您控制。

【讨论】:

  • 是的,对我来说,我将名称保存在数据库中,当我将其显示在带有href的表格上时,如果文件名太长,表格宽度会扩大并扩大,然后它会毁了我的整页设计格式。这就是为什么我想限制文件名而不是修剪文件名。
猜你喜欢
  • 2014-12-19
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
相关资源
最近更新 更多