`

ruby 又拍云上传图片(form_api)

 
阅读更多

1.所用到的插件

#cdn
gem 'carrierwave'
gem 'rest-client'
gem 'carrierwave-upyun'

 

 

2.在config/initializers文件夹下添加carrierwave.rb文件,内容:

CarrierWave.configure do |config|
    config.storage = :upyun
    config.upyun_username = "账户名"
    config.upyun_password = "密码"
    config.upyun_bucket = "空间名"
    config.upyun_bucket_domain = "空间访问地址"
end

 

3.新写model: upload.rb

#encoding: utf-8
class Upload
  BUCKET = "空间名"
  attr_accessor :save_key, :allow_exts, :content_length_range, :return_url, :notify_url, :unsharp, :quality, :password
  
  def initialize( opt )
     self.save_key = [opt[:prefix], Time.now.strftime("%y%m%d%I%M%S") +'size'+rand(10000).to_s+ "{.suffix}"].join("/") #文件存放的地址
     self.allow_exts = opt[:allow_exts]||"jpg,jpeg,gif,png"  #文件类型
     self.content_length_range = "0,#{200.kilobyte.to_i}"  #大小
     self.return_url = opt[:return_url]                                  #回调地址
     self.notify_url = opt[:notify_url]                                    #回调地址
     self.unsharp = opt[:unsharp]||false  
     self.quality = (opt[:quality] || 95 ).to_i 
  end
  
  def expiration
    Time.now.to_i + 600
  end
  
  def password
      "nBD/sdfssdEkDc="  #form_api又拍云外获取的验证密钥
  end
  
  def policy
    Base64.strict_encode64( policy_json )
  end
  
  def policy_json
     policies = {
      "bucket" => BUCKET,
      "expiration" => self.expiration,
      "save-key" => self.save_key,
      "return-url" => self.return_url
    }
    policies.to_json
  end
  
  def signature
    Digest::MD5.hexdigest("#{self.policy}&#{self.password}")
  end
  
end

4.上面的form_api(从又拍云处获取到的验证密匙):

 

 

 

5.help层添加一个方法:

 

#上传图片所有参数
def upyun_form_input_tag(opts = {})  
   upload=Upload.new( opts )
   return [ tag(:input, :type => :hidden, :name => "policy", :value => upload.policy),
                tag(:input, :type => :hidden, :name => "signature",:value => upload.signature)].join("\n").html_safe
end

 

  

6.html文件中写法:

<%=form_tag "http://v0.api.upyun.com/空间名/", :method=>:post, :multipart =>true do%>
   <%=upyun_form_input_tag( {:prefix=>"/zy_fenxiangs", :notify_url=>upload_picture_index_url} )%>
   <input type="file" class="btn_up_f" name="file"   />
   <%=submit_tag "提交"%>
<%end%>

 

7.controller层:

def upload
   params[:code]  #HTTP状态码
   params[:message]  #返回代码
   params[:url]  #图片地址
end

 

  • 大小: 1.5 KB
分享到:
评论

相关推荐

    Ruby-CarrierWaveRubyWeb框架更优雅的解决方案文件上传

    Ruby-CarrierWave 是一个流行的文件上传库,专为Ruby Web框架如Rails和Sinatra设计,旨在提供一种更优雅、更灵活的方式来处理文件上传。它弥补了Ruby标准库在处理文件上传时的不足,提供了丰富的功能和易于定制的...

    Ruby-Mechanize一个让自动化web交互变得容易的ruby库

    login_form = page.form_with(action: '/login') login_form.field_with(name: 'username').value = 'my_username' login_form.field_with(name: 'password').value = 'my_password' agent.submit(login_form) ``` ...

    Ruby-PatronRuby基于libcurl的HTTP客户端

    Patron支持multipart/form-data类型的POST请求,可以用来上传文件: ```ruby file = File.open('path/to/file') session.multipart_post("/upload", { file: file }) ``` 8. **HTTP认证**: 支持多种认证机制...

    Rails里给文件上传添加progress_bar

    在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...

    iOS图片上传

    在iOS开发中,图片上传是一项常见的任务,尤其是在社交媒体应用或者任何需要用户分享个人内容的应用中。本篇将详细讲解如何使用著名的网络库AFNetworking实现单张图片的上传操作。 AFNetworking是Objective-C编写的...

    Knockout API 中文版

    如果熟悉 Ruby on Rails 或其它MVC技术可能会发现它是一个带有声明式语法的MVC实时form。换句话说,你可以把KO当成通过编辑JSON数据来制作UI用户界面的一种方式… 不管它为你做什么 Developers familiar with Ruby ...

    jQueryformBuilder一个jQuery插件能够通过拖放的方式创建表单

    **jQuery formBuilder插件详解** jQuery formBuilder是一个强大的前端开发工具,专为简化表单构建过程而设计。它允许开发者和非技术用户通过直观的拖放界面创建自定义的表单,无需深入HTML、CSS或JavaScript代码。...

    多文件上传功能

    - **文件预览**: 在上传前,可以通过File API读取文件内容生成预览图,对图片、文本等格式的文件进行预览,确保用户上传的文件符合预期。 - **文件大小限制**: 为防止过大文件导致服务器压力,前端通常会限制...

    eventz_on_rails:небольшойучебныйпроектна在轨道上的Ruby

    Rails 6.0.3.5是这个项目的特定版本,该版本引入了多项新功能,如Action Cable支持实时通信、Active Storage简化文件上传处理,以及并行测试以加速测试套件的运行。在“eventz_on_rails”项目中,你可以学习如何利用...

    image-uploader-api

    "图像上传器API"是一个基于JavaScript技术实现的接口,它主要设计用于处理用户在Web应用中上传图片的交互。在现代Web开发中,图像上传功能是必不可少的,无论是社交媒体、电商平台还是个人博客,用户常常需要上传...

    记Laravel调用Gin接口调用formData上传文件的实现方法

    首先,要实现文件的上传,我们通常使用的是表单上传(multipart/form-data),在Laravel中,我们可以通过表单来发送文件数据。Laravel提供了一个方便的文件上传机制,允许开发者以非常简洁的语法来处理文件上传。在...

    分享5个好用的javascript文件上传插件

    在Web开发中,文件上传功能是不可或缺的一部分,尤其是在用户交互丰富的网站或应用中。JavaScript作为客户端的主要脚本语言,为文件上传提供了便利。本文将介绍5个功能强大且易于使用的JavaScript文件上传插件,帮助...

    Unirest轻量级的HTTP开发库 v4.2.9.zip

    7. **Multipart支持**:对于需要上传文件的POST请求,Unirest支持multipart/form-data,可以方便地发送二进制数据。 8. **全局配置**:可以通过全局配置来调整Unirest的行为,如设置默认的HTTP头、连接池大小等。 9....

    desafio-database-upload:Desafio的内容续约,不存在Node.js脚本或TypeScript,包含我们使用banco de dados com或TypeORM或arquivos com或Multer!

    对于文件上传,我们需要设置适当的存储策略,如本地存储、云存储或混合方案,并确保处理好文件大小限制、类型验证和错误处理。 此外,考虑到这是一个挑战或项目,我们还需要编写测试用例来验证数据库操作和文件上传...

    获取request的参数

    当需要上传文件时,POST请求通常使用`multipart/form-data`编码。在Java中,需要使用`HttpServletRequest`的`getPart()`方法,而在Express中,可以使用`multer`库来处理这类请求。 4. **JSON请求体**: 当请求体...

    epubify:使epub退出长篇文章(通过IFTTT + Dropbox)

    发布这是一个微型网络应用程序,它可以: 接受带有网址的请求以可读性解析页面(不需要API令牌) 从可读性中下载EPUB并上传到Dropbox文件夹(可选) 从Readability下载MOBI并发送到Kindle Personal Document(可选)...

    超漂亮的Bootstrap 富文本编辑器summernote

    你可以通过自定义`onImageUpload`事件处理图片上传。例如,使用Spring MVC后端进行文件接收和保存: ```javascript $('.summernote').summernote({ onImageUpload: function(files, editor, welEditable) { ...

    html5_demos:测试 html5 的新功能

    从描述中我们可以推测,这个项目可能在Linux 16 Mint Cinnamon环境下使用VI编辑器、RVM(Ruby Version Manager)以及相关的开发工具来构建和运行。 HTML5的新功能主要包括: 1. **语义化元素**:HTML5引入了更多...

    NODE.JS入门手册

    这个库可以帮助解析multipart/form-data类型的POST请求,这是文件上传常用的格式。 ```javascript const express = require('express'); const multer = require('multer'); const upload = multer({ dest: '...

Global site tag (gtag.js) - Google Analytics