【问题标题】:jQuery check that file upload is an mp3jQuery 检查文件上传是 mp3
【发布时间】:2013-03-29 23:04:16
【问题描述】:

使用正则表达式确保通过input[type="file"] 上传的文件是 MP3。出了点问题,我正在测试的文件没有通过。

感谢您的帮助!

HTML

<input type="file"/>

JavaScript

var file = $input.find('input[type="file"]'),
    val  = file.val(),
    type = /^([a-zA-Z0-9_-]+)(\.mp3)$/;

submit.attr('disabled', 'disabled').addClass('deac');

if (!val){

    modal("The upload can't be empty.", true);
} else if (!type.test(val)){

    modal("The song must be in MP3 format.", true);

    /***********
     *
     * Getting caught here- even with a valid .mp3 file that _should_ pass the regex
     * in my test case using mamp as a localhost, val = C:\fakepath\1.mp3 
     *
     ***********/
} else {

    /* Success */
}

【问题讨论】:

  • 如果“val”是“C:\fakepath\1.mp3”,那么它为什么没有通过就很清楚了——正则表达式不允许“:”或“\”。
  • 另外,您可能应该允许大写“MP3”,以防有人从 FAT 文件系统上传。 (当然,如果确保只上传真正的 MP3 文件真的很重要,您的服务器应该检查实际文件内容;文件名很容易被欺骗。)
  • @Pointy 正则表达式超出了我的范围,它们看起来像胡言乱语。介意在下面回答一个建议,这样我就可以给你信用并将这个从我的列表中删除?

标签: javascript regex file upload submit


【解决方案1】:

我认为最好的解决方案是使用mime()的方法。

这样,即使文件用a重命名。 Mp3 不是规避控制。

【讨论】:

  • 好主意,只是犹豫是否包含 sdk 进行简单检查
  • 你是对的! $('input[type="file"]').prop('files')[0].file; 所以提取文件的mime类型,你可以检查它。这样就不用导入所有的sdk了!
  • @loughino 返回未定义的本地和托管
【解决方案2】:

我认为 IE 是唯一添加类似“fakepath”前缀的浏览器,所以这样的东西可能会更好:

type = /^(?:[A-Z]:\\fakepath\\)?([a-zA-Z0-9_-]+)(\.[Mm][Pp]3)$/;

【讨论】:

  • 没有骰子-在本地和托管时遇到相同的故障。 fwiw 看起来 val 仍然包含服务器上的 fakepath 地址
  • @technopeasant 是的,不幸的是,您对此无能为力 - 让我检查一下正则表达式,我会更新
  • @technopeasant 抱歉,我跳过了反斜杠。现在我想起来,在服务器上获取“fakepath”部分似乎有点奇怪;我必须检查我自己的代码,看看我是否曾经这样做过。
猜你喜欢
  • 1970-01-01
  • 2015-04-25
  • 2013-11-17
  • 2011-07-12
  • 1970-01-01
  • 2013-08-24
  • 2010-10-21
  • 2014-05-18
相关资源
最近更新 更多