Cam*_*mel 9 ruby file-upload ruby-on-rails ruby-on-rails-3 carrierwave
我网站中的用户可以上传自己的模型照片或从库中选择.当用户从库中选择时,我将文件名作为字符串发送到服务器{file: {url: 'url.jpg'}}.我还没有找到一种方法,即载波可以在不上传的情况下更新模型文件.我可以在我的模型中写一个检查该参数是否存在的条件然后model.file = File.open('str.jpg').从安全角度看是不是很糟糕?如何"上传"文件,或者只更新文件属性,以引用服务器上已有的文件?
谢谢!
您的使用解决方案File.open可行,但您应该验证该名称是否有效,File.basename以便其他人无法通过../../secret_credentials.yml并公开您不希望他们看到的信息。另外,根据预设图像列表检查它也是一个好主意。
但是,在这种情况下,您可以通过跳过 CarrierWave 来更有效地完成此操作。
添加一个名为 的新字段library_image,当有人想要使用预设图像时,您可以设置library_image,如果他们想要使用自己的照片,请取消设置library_image并照常上传照片。然后添加一个辅助方法,例如:
def avatar_url
if self.library_image?
"http://example.com/images/#{self.library_image}"
else
self.picture.url
end
end
Run Code Online (Sandbox Code Playgroud)
这假设您可以在名为 的 CarrierWave 中找到http://example.com/images/[name]您正在使用的预设图像。mount_uploaderpicture
现在,任何时候你想显示他们的图片,你都会调用avatar_url它来检查是否应该返回预设的 URL,或者他们上传的图片。
library_image您将如何更新或picture基于原始问题的示例:
if params[:file].is_a?(Hash)
model.library_image = params[:file][:url]
model.remove_picture = true
else
model.library_image = nil
model.picture = params[:file]
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2907 次 |
| 最近记录: |