antd upload上传格式.doc.docx.pdf.png.jpg.rar和大小100兆限制

Posted 一只夏宇坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了antd upload上传格式.doc.docx.pdf.png.jpg.rar和大小100兆限制相关的知识,希望对你有一定的参考价值。

限制上传文件格式.rar、.zip、.pdf、.jpg、.png、.docx
antd 中upload对于限制上传文件格式的属性是accept,在开发的过程中,accept对于.doc、.docx、.pdf、.png、.jpg、.rar,格式的限制是完全没有问题的。但是测试和我说,当选择文件的自定义格式改为所有文件时,之前限制好的除了.doc、.docx、.pdf、.png、.jpg、.rar之外的文件格式的仍然可以进行选择,后端没有校验仍然可以上传成功。


所以就必须想办法解决了,刚好beforeUpload是upload上传文件之前的钩子,参数为上传的文件,若返回 false 则停止上传。我们在beforeUpload函数的file参数中可以获取上传文件的文件信息,这个时候我们就可以根据file里面的参数来进行判断。
注意:为什么要用file.name的后缀来匹配他的文件类型。因为file的type属性,表示文件类型,在docx后缀的文件type类型为:


type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"

为了支持上传docx文件,所以,只能用下面的方法来实现,因为对upload进行了封装,所以进行了一个转化,这样传入accept= ".rar,.zip,.pdf,.jpg,.png,.docx",方便处理
父组件处理

<Uploader 
 onChange=handleChange
 onRemove=handleRemove  
 accept= ".rar,.zip,.pdf,.jpg,.png,.docx" />

子组件处理

// ts写法
const handleBeforeUpload = (file_: any, options_: any) => 
    const file = file_;
    const options = options_;
    // 获取文件后缀如docs,rar,zip等
    const fileType = file?.name.split(".");
    const fileDate = fileType.slice(-1);
    // 将从父组件拿到的accept类型转为数组,类似['.docs','.rar','.zip']
    const docsArr = accept?.split(",");
    if (!docsArr?.includes(`.$fileDate[0]`)) 
      message.error(`仅支持文件格式:$accept格式附件!`);
      return false;
    
    if (file.size / 1024 / 1024 > 100) 
      message.error("文件大小不能超过100兆");
      return false;
    
  

Symfony Upload doc, docx file using sfValidatorFile Mime type issue

【中文标题】Symfony Upload doc, docx file using sfValidatorFile Mime type issue【英文标题】: 【发布时间】:2013-04-16 12:31:31 【问题描述】:

我正在使用 sfValidatorFile 类来允许用户在 symfony 1.4 中上传 pdf 或文档。 但它不适用于文档,它返回阻止上传文档的 mime 类型 octet-stream。

我已经尝试过here提供的解决方案!

但不幸的是,它不起作用。这是我的代码。

'my_filename' => new sfValidatorFile(
              array ('required'=>false,
                     'mime_type_guessers' => array('guessFromFileinfo'),
                     'mime_types' =>  array ( 'application/pdf',
                                              'application/msword',
                                              'application/vnd.openxmlformats-
                                              officedocument.wordprocessingml.document',                
                                                  'application/vnd.ms-word',
                                                  'application/x-msword',
                                                  'application/msword;     charset=binary')) ,
                array( 'mime_types'=> 'only doc, docx and pdf files are allowed' )),

还尝试使用同一链接上提供的 msValidatorFile 类解决方案,但它也允许上传 zip 和 rar。

有没有办法只允许上传pdf和文档?

【问题讨论】:

【参考方案1】:

经过一段时间我在这里找到了另一个解决方案共享,这与系统无关。

使用 PHP mime_content_type 函数,即使在手动更改扩展名后,我们也可以获得 exect mime 类型。虽然它在 linux 许可证版本上不起作用。但我们仍然可以在其他平台上使用它。

【讨论】:

您需要添加更多细节:它已通过升级到版本 X 修复。您更新了哪个系统?操作系统?交响乐?帮助有相同或相似问题的其他人。 请提供更多细节!我有同样的问题,需要你的解决方案!非常感谢!!!

以上是关于antd upload上传格式.doc.docx.pdf.png.jpg.rar和大小100兆限制的主要内容,如果未能解决你的问题,请参考以下文章

Antd的Upload组件上传文件控制文件数量格式等,以及提交时如何获取文件

Antd的Upload组件上传文件控制文件数量格式等,以及提交时如何获取文件

antd的upload组件上传功能踩坑

AntD框架的upload组件上传图片时使用customRequest方法自定义上传行为

上传路径似乎无效“。 Codeigniter文件上传

antd引用<Upload>组件上传图片后再次上传清除缓存