ruby-on-rails - Carrierwave:使用空格而不是下划线
问题描述
我们有一个 PDF 上传器。当文件名中包含空格时,它们会自动转换为使用下划线:
some file test
->some_file_test
我想保留这些空间。有人能告诉我怎么做吗?
我试过:
def filename
original_filename
end
解决方案
您可以通过添加空格来覆盖清理正则表达式:
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+\ ]/
如您所见,此正则表达式用于将禁止符号替换为下划线的sanitize
方法。
文件名和 unicode 字符
您应该注意的另一个安全问题是文件名(请参阅Ruby On Rails 安全指南)。默认情况下,CarrierWave 仅提供英文字母、阿拉伯数字和一些符号作为文件名中的白名单字符。如果要支持本地脚本(西里尔字母、带变音符号的字母等),则必须覆盖
sanitize_regexp
方法。它应该返回匹配所有不允许的符号的正则表达式。CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
还要确保允许非拉丁字符不会导致与第三方插件或客户端软件的兼容性问题。
推荐阅读
- postgresql - 在 postgresql 中,如何连接第一个连接有约束的 4 个表?
- amazon-web-services - 生产中的 .netcore (aws) 反向代理和 elb?
- mysql - SQL 计算几个不同组中的项目数量
- angularjs - 如何动态更新 AngularJS $scope 变量?
- azure - Microsoft Graph API 权限在文档和 Azure 门户下可用的内容之间有所不同
- rest - 使用流明检索边缘和关系属性
- python - 没有 CA 证书的适用于 Python 的 AWS IoT 设备开发工具包
- amazon-web-services - AWS - EC2,是否有像 ELB 这样的应用程序健康检查?
- c - 合并排序与 C 中的 PThreads
- javascript - 如何在 React js 中使用纯 CSS 和 JS 构建 Spritesheet