我是rails的新手,并且一直关注YouTube上的教程https://www.youtube.com/watch?v=70Pu_28yvdI并且已经到了40分钟左右,当我尝试创建新帖子并附加图片时出现错误图片的扩展名为与其内容不匹配,我编写了与他完全相同的代码,并不断收到错误。非常感谢你的帮助。
post.rb文件
class Post < ActiveRecord::Base
belongs_to :user
has_attached_file :image, styles: { medium: "700x500#", small: "350x250" }
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
end
post_controller.rb文件
class PostsController < ApplicationController
before_action :find_post, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, except: [:index, :show]
def index
@post = Post.all.order("created_at DESC")
end
def show
end
def new
@post = current_user.posts.build
end
def create
@post = current_user.posts.build(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
def edit
end
def update
if @post.update(post_params)
redirect_to @post
else
render 'edit'
end
end
def destroy
@post.destroy
redirect_to root_path
end
private
def find_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :link, :description, :image)
end
end
20150728130528_add_attachment_image_to_posts.rb档案
class AddAttachmentImageToPosts < ActiveRecord::Migration
def self.up
change_table :posts do |t|
t.attachment :image
end
end
def self.down
remove_attachment :posts, :image
end
end
答案 0 :(得分:0)
如果您在Windows上(来自https://github.com/thoughtbot/paperclip):
如果您使用的是Windows 7+作为开发环境,则可能需要 手动安装file.exe应用程序。文件欺骗系统 在Paperclip 4+中依赖于此;如果你没有它工作,你会 接收验证失败:上传文件的扩展名没有 匹配其内容。错误。
确保您使用与验证相同的图像类型:
您应确保将文件验证为仅属于那些MIME类型 你明确想要支持。如果不这样做,您可以对XSS开放 如果用户上传带有恶意HTML有效负载的文件,则会受到攻击。
如果您只对图片感兴趣,请限制您的图片 content_types到image-y的:
validates_attachment :avatar,
:content_type => { :content_type => ["image/jpeg", "image/gif", "image/png"] }
Paperclip :: ContentTypeDetector将尝试匹配文件 扩展到推断的content_type,无论实际情况如何 文件的内容。