前端文件上传限制

问题起因#

前端限制了文件类型.jpg,.png,.jpeg 发现客户上传了 pdf 文件。

前端代码#

# Ant Design Vue  Upload组件
<Upload :fileList="list" :customRequest="uploadFile" :multiple="true"         accept=".jpg,.png,.jpeg"
    @remove="removeItem" @change="changeFile">
    <Button icon="upload">上传附件</Button>
</Upload>

自己一直以来错误的想法#

前端允许上传的文件类型可以通过定义 accept 来限制

实际上#

前端在文件上传框里的文件限制

accept 定义的只是绿色箭头标注的地方, 用户依旧可以通过选择红色箭头标选的所有文件,来上传accept定义的文件类型外的文件

问题#

想看看大伙儿纯前端限制文件类型是通过哪些方式实现的?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

ant 可以在上传之前拦截判断 beforeUpload

11个月前 评论
fofome (楼主) 11个月前

永远不要相信来自前端的输入。

对于前端而言,在上传前,得到的 files 属性是个数组,可以遍历过滤掉。

11个月前 评论

对于前端,可以在上传之前再次校验文件属性,对于后端,可以通过文件头检验文件类型,前端用于优化体验降低错误请求,后端则是最后把关,尤其后端至关重要,楼上说得对,永远不要相信来自前端的输入。

11个月前 评论

file

也不排除 将 pdf 扩展名改成 jpg

 inputFile = document.querySelectorAll('input[type="file"]');
// 当文件被选中时进行检查
inputFile.addEventListener('change', function() {
  // 获取文件列表
  const files = this.files;

  if (files.length > 0) {
    // 获取文件的MIME类型
    const fileType = files[0].type;


    // 检查文件类型是否是你想要的类型
    if (fileType === 'image/jpeg' || fileType === 'image/png') {
      console.log('文件类型正确',fileType,files[0]);
      // 文件类型符合要求的处理逻辑
    } else {
      console.log('不支持的文件类型',fileType);
      // 文件类型不符合要求的处理逻辑
    }
  }
});

不清楚是否准确,懂点代码,但不是前端

PS: 根据文件前面 4 字节编码判断的文件类型才准确。不知道 js 是否可以实现

11个月前 评论
梦想星辰大海

前端能做的只是提高伪造门槛,彻底防御还得是后端重绘。

11个月前 评论