gpt4 book ai didi

ruby-on-rails - Carrierwave - "uploading"来自字符串的文件

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:14 27 4
gpt4 key购买 nike

我网站中的用户可以上传自己的模特照片或从图库中选择。当用户从库中选择时,我将文件名作为字符串发送到服务器 {file: {url: 'url.jpg'}}。我还没有找到 carrierwave 可以只更新模型文件而不上传它的方法。我可以在我的模型中编写一个条件来检查该参数是否存在,然后是 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

这假设您可以在 http://example.com/images/[name] 中找到预设图像,并且您正在 CarrierWave 中使用名为 mount_uploader >图片

现在任何时候你想显示他们的照片,你都可以调用 avatar_url,它会检查它是否应该返回预设的 URL,或者他们上传的照片。

您将如何根据原始问题更新 library_imagepicture 的示例:

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

关于ruby-on-rails - Carrierwave - "uploading"来自字符串的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11752440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com