php - 为什么无法通过 PhpOffice\PhpSpreadsheet 读取 csv 文件?
问题描述
我正在使用 PhpOffice\PhpSpreadsheet 读取 csv 文件,例如:
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($file);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($file);
它错误:Warning: mime_content_type(): Can only process string or stream arguments
。
但它适用于 xlsx 文件。
我尝试使用 PhpOffice\PhpSpreadsheet\Reader\Csv 但这是同样的错误。我尝试转储 $file,我看到 mimeType 是text/csv
,但是当 $file->getMimeType() 是 return 时text/plain
。这使我无法验证上传文件(我只允许用户上传 xlsx/csv 文件)。我认为这可能导致错误无法读取 csv 文件?
编辑:这是我的错。load()
将参数作为字符串接收,但我传递了 Symfony\Component\HttpFoundation\File\UploadFile (因为它适用于 xlsx 文件)。所以改成$file
,$file->getPathName()
效果很好。但是使用验证文件,我想我必须接受文本/纯文本,有人知道吗?
解决方案
您可以使用该方法检查文件的 MIME 类型$file->getClientMimeType()
。这将为您提供您正在寻找的“text/csv”字符串。
推荐阅读
- kotlin - 为什么 Sinks.many().multicast().onBackpressureBuffer() 在订阅者之一取消订阅后完成以及如何避免它
- java - 是否可以优化我的自定义反序列化器?
- java - 如何在 JavaFx 中检测当前的键盘语言(英语、俄语等)
- asp.net-core - 如何在 Azure bot 中使用 c# 添加自定义类型指示器
- database - 有没有办法在两列中突出显示重复的值组合,而不管顺序如何?
- database - 将 MongoDB 用于多租户应用程序
- javascript - 在移动设备上动态设置元视口
- javascript - 如何在下拉 jquery 中获取预选值?
- react-native - 创建 react-360 项目时出错
- c# - 函数在杀死进程后停止运行