首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rails调用文章中通过shrine上传的图片

在Rails中使用Shrine上传图片并在文章中调用,你需要遵循以下步骤:

1. 安装和配置Shrine

首先,你需要安装Shrine gem并在你的Rails应用中进行配置。

安装Shrine Gem

在你的Gemfile中添加Shrine:

代码语言:javascript
复制
gem 'shrine'

然后运行bundle install

配置Shrine

创建一个新的初始化文件来配置Shrine:

代码语言:javascript
复制
rails generate shrine:install

这将会创建一个config/initializers/shrine.rb文件,你可以在这里配置你的存储服务(例如本地文件系统、Amazon S3等)。

例如,配置本地存储:

代码语言:javascript
复制
Shrine.storages = {
  cache: Shrine::Storage::FileSystem.new('public', prefix: 'uploads/cache'),
  store: Shrine::Storage::FileSystem.new('public', prefix: 'uploads'),
}

2. 创建图片上传处理器

创建一个处理器来处理图片上传:

代码语言:javascript
复制
rails generate shrine:processor ImageProcessor

在生成的处理器中,你可以添加图片处理的逻辑,例如使用ImageMagick或MiniMagick。

3. 创建模型并附加 Shrine

在你的文章模型中附加Shrine:

代码语言:javascript
复制
class Article < ApplicationRecord
  include Shrine::Attachment.new(:image)
end

4. 迁移数据库

添加一个迁移来创建articles表并包含图片字段:

代码语言:javascript
复制
rails generate migration AddImageToArticles image:string

运行迁移:

代码语言:javascript
复制
rails db:migrate

5. 创建表单上传图片

在你的文章表单中添加图片上传字段:

代码语言:javascript
复制
<%= form_with model: @article, local: true do |form| %>
  <%= form.label :image %>
  <%= form.file_field :image %>
  <%= form.submit %>
<% end %>

6. 处理上传的图片

在你的文章控制器中处理图片上传:

代码语言:javascript
复制
class ArticlesController < ApplicationController
  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to @article, notice: 'Article was successfully created.'
    else
      render :new
    end
  end

  private

  def article_params
    params.require(:article).permit(:title, :content, :image)
  end
end

7. 显示上传的图片

在你的文章视图中显示上传的图片:

代码语言:javascript
复制
<%= image_tag @article.image_url(:medium) %>

这里:medium是你在Shrine配置中定义的一个图片变体。如果你没有定义任何变体,你可以直接使用:original

8. 配置图片变体

如果你需要不同尺寸的图片,可以在Shrine的初始化文件中配置图片变体:

代码语言:javascript
复制
Shrine.plugin :derivatives
Shrine.plugin :derivation_endpoint

Shrine.derivatives[:medium] = ->(io, context) {
  io.download do |original|
    MiniMagick::Tool.new('convert').call(original.path, '-resize', '300>', original.path)
  end
}

确保你已经安装了MiniMagick gem:

代码语言:javascript
复制
gem 'mini_magick'

然后在你的模型中使用这些变体:

代码语言:javascript
复制
class Article < ApplicationRecord
  include Shrine::Attachment.new(:image, versions: { medium: Shrine::Derivative[:medium] })
end

这样,你就可以在文章中调用通过Shrine上传的图片了。记得在实际部署时配置适当的存储服务,例如Amazon S3,以确保图片的安全存储和高效访问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Django 图片上传及显示

    在 Django 上传文件不同于普通服务器上传方法,在普通服务器只需要使用一个 Controller 来控制文件上传即可完成,但是在 Django ,则需要额外使用数据库资源来存储文件。...,而是 Django 将会自动将文件上传到你设置位置,并且把上传之后图片 path 存入数据库,这样你只需要访问数据库 path 即可访问到图片。.../media/img 文件夹,在上传完成之后,img 将会保存图片 path。...path('file/image_upload', views.file__image_upload) ] 上传图片和访问图片 完成这些后,你只需要在前端需要上传图片地方将 url 指向这个地址,就能将图片成功上传...,上传完成之后你可以使用 /media/ 加上数据库图片 path 就能访问到图片

    3.3K20

    EasyDSS如何通过postman调用上传点播文件接口?

    我们常说EasyDSS平台点播功能是一项在教育、医疗方面都具备一定优势功能,支持自行上传视频文件,但在EasyDSS点播上,接口调用还是有部分问题需要大家注意。...鉴于在postman上面调用上传点播文件接口用户比较多,所以本文我们介绍下该接口调用方法。...image.png 并且需要把参数格式从test改成file,修改位置如下所示: image.png 然后选择需要上传文件即可上传。...image.png 调用成功后则可以在EasyDSS页面上看到刚刚上传点播文件,显示如下: image.png 经过我们不断地研发和优化,EasyDSS点播功能也愈发完善,当然EasyDSS直播和虚拟直播也能在现有项目中发挥较好作用...image.png EasyDSS能够集流媒体点播、转码、管理、直播、录像、检索、实时回看于一体,并且在地址调用方面,能够上传视频后一键生成视频地址,以供用户分享、嵌入到网站、产品软件系统,便捷实用,

    75300

    EasyDSS如何通过postman调用上传点播文件接口?

    我们常说EasyDSS平台点播功能是一项在教育、医疗方面都具备一定优势功能,支持自行上传视频文件,但在EasyDSS点播上,接口调用还是有部分问题需要大家注意。...鉴于在postman上面调用上传点播文件接口用户比较多,所以本文我们介绍下该接口调用方法。...并且需要把参数格式从test改成file,修改位置如下所示: 然后选择需要上传文件即可上传。...调用成功后则可以在EasyDSS页面上看到刚刚上传点播文件,显示如下: 经过我们不断地研发和优化,EasyDSS点播功能也愈发完善,当然EasyDSS直播和虚拟直播也能在现有项目中发挥较好作用...EasyDSS能够集流媒体点播、转码、管理、直播、录像、检索、实时回看于一体,并且在地址调用方面,能够上传视频后一键生成视频地址,以供用户分享、嵌入到网站、产品软件系统,便捷实用,如果大家还想了解更多相关内容

    75820

    工具 | 使用Typora写文章如何一劳永逸上传图片

    文章的人都很注意排版,毕竟文章版面是否好看是能否留住读者读完你文章关键。 Markdown格式文本对排版来说异常简单,只需记住一些常用语法就行了。...然而在Typora编辑文章时,上传图片都存在本地,如果要发表到自己博客上,图片就会不显示,还需要再手动上传一下,那是相当麻烦,这篇文章将介绍一下,如何设置Typora图床,一劳永逸。...这里需要借助 PicGo 来充当上传工具,而使用 Gitee 作为图片仓库。 ❝GitHub也可以,但它有时候打开很慢,影响心情。而Gitee免费好用,速度快。...image-20210609131352330 点击“验证图片上传选项”验证一下: ? image-20210609131458547 爽歪歪,接下来上传图片,看一下路径 ?...image-20210609131643039 这就说明图片路径已经指向了我们Gitee图床,这时候再把文章拷到别处,图片就能正确显示了!

    89220

    Flutter相机拍照、相册选择图片上传图片到服务器

    需要注意是,image_picker这个第三方组件只能是单选图片,如果大家有多选图片需要,可以自己去pub.dev上面去搜索,本文只是针对“选择图片上传”这一功能点做思路介绍,所以对于各种第三方...File _image; //当图片上传成功后,记录当前上传图片在服务器位置 String _imgServerPath; //拍照 Future _getImageFromCamera.../daoyXVTvrCCUeoIliZtNXX-s.png"), ], ), ), ); } } 选择完了图片之后,点击上传图片按钮进行图片网络上传...简单说一下选择图片以及图片上传思路。 本文选择获取图片第三方是只能选择一张图片,在后期项目中,我们肯定会要求多选,所以大家自己去寻找可以拍摄多张图片或者可以在相册中选择多张图片第三方组件。...选择好了图片之后,我们将选择图片记录下来,然后采取Dio这个第三方网络库上传图片,可以上传一张图片,也可以上传多张图片,但时候大家在项目中使用时候,一定要实现详细阅读使用文档和Demo,我这里示例仅仅是演示了上传一张图片场景

    21.1K32

    批量替换WordPress文章图片URL地址方法

    什么情况需要更换WordPress文章图片URL地址?...1、更换了网站域名有许多网站建设初期都随便选择了一个网站域名,在更新文章时候,上传图片很多时候都是自带网站域名,因此,一旦更换域名时候,图片链接地址就会失效。...3、其他原因造成图片地址失效以上三种情况,如果要更换文章图片链接地址时,不进行批量式修改,通过手工修改,除非文章才十篇八篇,那样就无所谓,否则将是很难更新图片地址。...两种可以批量式更新WordPress文章图片链接地址方法:方法一、更新数据库操作通过MySQL操作命令语句进行更新Update所有的文章图片链接地址。首先,备份好数据库。...方法二、通过替换文章文本方式操作这一种方法最为简单,只需要将下面的代码加入Function.php文件即可。

    7.7K20

    我试图通过这篇文章告诉你,什么是神奇泛化调用

    所以我们泛化调用,也是通过下面这两个 Filter 来搞事情: org.apache.dubbo.rpc.filter.GenericFilter org.apache.dubbo.rpc.filter.GenericImplFilter...通过这部分源码可以看出来,泛化调用对于客户端,即在 GenericImplFilter 里面,并没有做什么特别的操作,注意还是参数校验。...method 方法: 这个方法,从名字上也可以看出,是根据方法签名反射出具体方法: 在服务端,是有 DemoService 接口对应,所以可以通过反射找到它。...其实它也是可以知道,比如可以提供一个参数给用户进行配置,把选择权给到用户,让用户通过配置来告诉你。甚至它可以不用用户提供信息,可以自己来做数据收集,来评判这个方法是否应该被缓存起来。...好了,价值也上完了,本文技术部分就到这里啦。 下面这个环节叫做[荒腔走板],技术文章后面我偶尔会记录、分享点生活相关事情,和技术毫无关系。

    45210

    将数据库图片信息导出并调用

    github 仓库上传网页,并且在数据库记录上传信息,比如缩略名、时间戳和图片链接。...分别对应 GitHub 仓库图片,但是后期我发现在 GitHub 查看图片非常别扭,因此我打算写一个可展示图片网页,把 GitHub 仓库图片通过链接展示出来,当然我们不可能一张张复制,还好有数据库...> 分别将缩略名,时间戳,图片链接,和上传ip通过 json 格式导出,非常完美。...接口链接:http://121.196.166.173/img/img.php 使用 ajax 进行调用 然后只需要在前端将接口调用,然后简单写一个页面即可,下面是 html 代码,,通过 ajax 调用...,可以看一下效果 http://121.196.166.173/img 时间仓促,我也没使用更好 ui 进行优化,只是大致写一下这个过程,待到以后具体使用时,我会对这个展示图片页面进一步优化。

    1.4K10

    Z-BlogPHP 主题制作技巧,随机获得文章图片

    ="{$related.Url}">{$related.Title} {/foreach} 获取大目录下所有文章(包括子目录文章),将上面的GetList改为: Getlist(调用条数...:c_index.php 和 c_list.php 随机获得文章四张图片一张 适用于多图站点,在模板文件中使用: {php} $temp=mt_rand(1,4); $pattern="/ 仅显示文字文章简介调用方法 {SubStrUTF8(TransferHTML($article.Intro,"[nohtml]"),200)} 分类目录面包屑代码编写...'全部文章">' .$cate->Name. ' '....方法一和方法二区别:方法一是通过匹配tags,然后按照更新时间列出相关文章;方法二,同样通过匹配tags,然后随机列出相关,但随机比较消耗资源,并且不支持SQLite数据库。

    48730

    将WordPress文章外链图片自动下载到本地

    WordPress很多插件或者代码都可以实现在编辑文章自动将外链图片下载到本地,最终我选择了一个叫:Easy Copy Paste插件。...,就可以将文章外链图片下载到本地并替换链接。...不过逐个编辑文章不仅繁琐而且工作量不小,这里教大家一个小技巧,可以批量下载文章外链图片。...批量操作 该插件代码不仅可以在正常编辑页面点击更新按钮触发下载功能,而且可以在后台所有文章列表页面触发下载图片功能,原理明白了,操作就简单了。...这个过程将触发检查所有选定文章,并自动下载外链图片! 声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。

    46350

    在线教育平台开发,作业功能图片上传是如何实现

    目前,很多在线教育平台中,为了验证课堂教学效果或学员学习情况,一般都内置了作业系统。学员在上传作业过程,有可能会上传多张图片并按序(自下而上)排列,那么这个功能是如何实现呢?...下面小编就以iOS版本在线教育平台开发为例,来说明下,如何使用WKWebView来实现图片排列。 一、先创建一个wkwebview - (WKWebView *)wkWebV{     if (!...- (void)getImageData{ //图片链接数组,这里随便找了几张图片     NSArray *array = @[@“ https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy...:htmlStr]; //使用WKWebview加载HTMLSting     [_wkWebV loadHTMLString:htmlStr baseURL:nil]; } 以上就是在线教育平台开发,...如何使用WKWebView来实现作业功能图片排列效果。

    72020
    领券