【发布时间】:2014-06-04 10:07:11
【问题描述】:
我使用this tutorial,但不能用回形针上传图片,它给出“头像的扩展名与其内容不匹配”错误。
我确信 ImageMagick 已安装并正常工作。
表格:
<%= form_for @user, :url => users_path, :html => { :multipart => true } do |f| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :avatar %><br>
<%= f.file_field :avatar %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
用户控制器
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
# GET /users
# GET /users.json
def index
@users = User.all
end
# GET /users/1
# GET /users/1.json
def show
end
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
end
# POST /users
# POST /users.json
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:avatar)
end
end
user.rb
class User < ActiveRecord::Base
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end
【问题讨论】:
-
您要上传的文件是什么,它在哪里?你确定它的内容 do 匹配它的扩展名吗?
-
我已经尝试过 avatar.png 和 avatar.jpg。我很确定这些图片。
-
您在哪个平台上运行?什么版本的回形针?我相信 Paperclip 使用
file来检查content-type spoofing;如果你把你的头像图片放到服务器上,然后在上面运行file --mime-type avatar.jpg,结果是什么? -
我在 windows 7 上,'paperclip','~> 4.1.1',它给出错误:文件未被识别为内部或外部命令
-
你肯定已经测试过ImageMagick的位置,并且设置了合适的环境文件的
command_path,正如Paperclip的安装说明中描述的那样? (另外:作为健全性检查,您是否尝试过完全不同的文件?)
标签: ruby-on-rails ruby-on-rails-4 upload paperclip