我正在尝试为网站的一部分提供一次性的图像上传功能(通过ajax)。现在,发布的值如下所示:
Processing by ApiPostsController#upload_image as */*
Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x007feb23c28420 @original_filename="yoko.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name="file"; filename="yoko.jpg"rnContent-Type: image/jpegrn", @tempfile=#<File:/var/folders/58/8l1dcc5n6dd_7mhqvqr_3zm40000gn/T/RackMultipart20140107-70298-1mih9mx>>}
this is auth_token WgfFAEz3JIApcWDjz2dRgA
我想在控制器中做这样的事情:
def upload_image
@asset=Asset.new
@asset.asset_file_name=params[:filename]
@asset.save!
r={}
r[:status]="success"
render text: r.to_json
end
我们的资产模型使用资产作为名称(不幸的是)。
mysql> describe assets;
+----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
| asset_file_name | varchar(255) | YES | | NULL | |
| asset_content_type | varchar(255) | YES | | NULL | |
| asset_file_size | int(11) | YES | | NULL | |
| asset_updated_at | datetime | YES | | NULL
我正试图遵循回形针的自述,上面写着:
Paperclip最多可包含四个属性(所有属性都以该属性为前缀附件的名称,因此如果你愿意),并给他们一个友好的前端。这些属性是:
_文件名_文件大小(_S)_content_type_更新
默认情况下,回形针只需要_file_name运转
但我得到这个错误
ActiveRecord::RecordInvalid(验证失败:资产不能为空):app/controllers/api_posts_controller.rb:21:在`upload_image'中
如何让回形针接受此上传的文件?
尝试:
@asset.asset = params[:file]
文档中所写的内容意味着您可以将这四列添加到模型中,并且在保存附件时都会自动填充。asset_file_name
是唯一需要的列,它将包含在服务器上创建的新文件的名称。如果你只分配file_name,你只会在数据库中填写一列,但文件本身并没有保存在服务器的磁盘上——你需要分配整个文件,其余的由回形针处理。