ruby-on-rails - 无法上传类型为 application/* 的回形针中的不同文件
问题描述
我正在使用带有 ruby 2.4 的 rails 5
gem "paperclip", "~> 5.0.0"
我上传的文件的内容类型是
@content_type="application/octet-stream"
(这是来自终端),所以我在模型中提到了这个内容类型:
class CompletedJob < ApplicationRecord
# validates :name, presence: true # Make sure the owner's name is present.
has_attached_file :file
validates_attachment :file,
:content_type => {content_type: [ "application/octet-stream", 'text/plain', 'text/csv', 'application/vnd.ms-excel']}, message: "is not in CSV format",
:size => {in: 0..400.megabytes}
belongs_to :job
end
但错误仍然保持不变:
由于扩展名不正确,文件未上传
你能指导我哪里出了问题吗?提前致谢
终端输出为:
Processing by Cader::CadersController#update_job as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"QrHTEdY2QhEQQmMI111lqnBglPdNIwWeLBn4aDLeR/2I5Wyxa1JteVyOCZDr9x6DTQYzr/VKpIWkcSNJy8HXYw==", "completed_job"=>{"file"=>#<ActionDispatch::Http::UploadedFile:0x007fcba009f808 @tempfile=#<Tempfile:/tmp/RackMultipart20190222-18635-6rkt5h.cfg>, @original_filename="job.cfg", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"completed_job[file]\"; filename=\"job.cfg\"\r\nContent-Type: application/octet-stream\r\n">, "job_id"=>"31122", "reference_name"=>"212 BLOOMER ", "source_type"=>"TUKAcad current edition", "other_source_type"=>"", "final_type"=>"TUKAcad current edition", "other_final_type"=>""}, "commit"=>"upload"}
User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` DESC LIMIT 1
Role Load (0.5ms) SELECT `roles`.* FROM `roles` INNER JOIN `users_roles` ON `roles`.`id` = `users_roles`.`role_id` WHERE `users_roles`.`user_id` = 2 AND (((roles.name = 'cader') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL)))
(0.3ms) SELECT COUNT(*) FROM `cader_notifications` WHERE `cader_notifications`.`recipient_id` = 2 AND `cader_notifications`.`read_at` IS NULL
Command :: file -b --mime '/tmp/9dddd5ce1b1375bc497feeb871842d4b20190222-18635-827e75.cfg'
[paperclip] Content Type Spoof: Filename job.cfg (application/octet-stream from Headers, [] from Extension), content type discovered from file command: text/plain. See documentation to allow this combination.
(0.2ms) BEGIN
Command :: file -b --mime '/tmp/9dddd5ce1b1375bc497feeb871842d4b20190222-18635-l58du6.cfg'
[paperclip] Content Type Spoof: Filename job.cfg (application/octet-stream from Headers, [] from Extension), content type discovered from file command: text/plain. See documentation to allow this combination.
Job Load (0.4ms) SELECT `jobs`.* FROM `jobs` WHERE `jobs`.`id` = 31122 ORDER BY `jobs`.`id` DESC LIMIT 1
(0.1ms) ROLLBACK
Redirected to http://localhost:3000/cader/caders/checkin
Completed 302 Found in 30ms (ActiveRecord: 2.1ms)
解决方案
创建一个文件 initializers/paperclip.rb 并写入:
module Paperclip
class MediaTypeSpoofDetector
def spoofed?
false
end
end
end
在您的模型中将验证写为::
validates_attachment :file,
:content_type => {content_type: /\/(?!(php|pl|exe|pm|cfm|asp)$)/},
:size => {in: 0..400.megabytes}
推荐阅读
- keras - 带有 POS 的 Word2Vec 没有产生预期的结果?
- powerquery - 如何拆分一行,其中每个单元格中有 2 个数据由回车分隔?
- angular - Angular HttpClient get 方法返回具有错误命名属性的对象
- python - 求解线性方程组,其中每个矩阵元素本身都是矩阵 (2D),每个变量都是 1D 向量
- tensorflow - 如何将滤镜转换回 RGB 值?
- javascript - 如何模拟文本字段的 inputRef
- laravel - 如何仅验证我通过获取请求获得的值的一部分?
- c++ - 将 x、y、z 转换为航向和角度
- javascript - Bug 问题:失败的道具类型:道具`onClick`在`Letter`中标记为必填,但其值为`undefined`
- apache - 从私钥生成 Apache 公钥