`

ruby 先上传到服务器,再上传到又拍云

 
阅读更多
 

 1.插件:

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

 

2.view层只要:

 

<%=form_tag ajax_up_picture_upload_index_path :method=>:post, :multipart =>true do%>
     <input type="file" class="btn_up_f" name="pic_path"  />
     <%=submit_tag "提交"%>
 <%end%>

 

3.controller层:

#只要调用
Upload.upload(params[:pic_path], "存放路径")

  

4.model层方法:

#encoding: utf-8
class Upload
  require "net/http"
  require "uri"
  require 'net/http/post/multipart' 
  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] || "{filename}{.suffix}"
    # 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
      "ntdsfasdIENDL/SDLDKNDDssddd="  #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
    }
    policies.to_json
  end
  
  def signature
    Digest::MD5.hexdigest("#{self.policy}&#{self.password}")
  end
  
  #上传到本地后再上传到又拍云
  def self.upload pic_path, relative_path
       path, filename = local_upload(pic_path, relative_path)
       opt = {}
       opt[:prefix] = relative_path + filename
       upyun_path = upyun_upload(path, filename, opt)
       return upyun_path
  end
  
  #本地上传
  def self.local_upload pic_path, path
      name = Time.now.strftime("%y%m%d%I%M%S") + 'size'+ pic_path.size.to_s
      suffix=File.extname("#{pic_path.original_filename}")
      name<<suffix
      directory = UPPATH+path
      if !File.exist?(directory)
         FileUtils.mkdir_p(directory)               #创建文件夹
      end
      path = File.join(directory, name)
      filesave(pic_path, path)
      return path, name        #绝对路径
  end
  
  #上传图片
  def self.upyun_upload pic_path, filename, opt={}
       file = File.open(pic_path, "rb")
       upload=Upload.new(opt)
       params={ :policy => upload.policy,
                       :signature => upload.signature,
                       :file => UploadIO.new(file, 'application/octet-stream', filename) }
       upyun_path=perform_post(URI.parse(UPYUN_BUCKET_DOMAIN), pic_path, params)
       return upyun_path
  end
  
  private
  #文件上传处理
  def self.filesave(upload,path)
      File.open(path, "wb") { |f| f.write(upload.read) }
  end
  
  def self.perform_post uri, pic_path, params
      begin
            http = Net::HTTP.new(uri.host, uri.port)
            req = Net::HTTP::Post.new(uri.request_uri)
            req = Net::HTTP::Post::Multipart.new(uri.path, params)
            res = JSON.parse(http.request(req).body)
            logger.info "----------------upyun ftp picture--------------"
            logger.info res
            if res["code"]=="200"
                return res["url"]
            else
                return nil
            end
      rescue 
            return nil
      end
    end 
    
end

 

分享到:
评论

相关推荐

    ruby上传文件

    1. **Ruby on Rails框架**:Ruby上传文件通常是在Ruby on Rails框架下进行的,这是一个用于快速开发Web应用的全栈框架,它遵循MVC(模型-视图-控制器)架构模式。 2. **Controller**:在Rails中,控制器负责处理...

    gcm, 在通过谷歌云消息传递( GCM )的设备上,gem 可以帮助开发者从 ruby 后端服务器发送数据到他们的移动应用程序.zip

    gcm, 在通过谷歌云消息传递( GCM )的设备上,gem 可以帮助开发者从 ruby 后端服务器发送数据到他们的移动应用程序 用于Android和iOS的Google云消息传送( GCM ) GCM gem 允许你的ruby 后端通过 Google云消息向Android...

    bilibili自动上传视频(纯ruby)

    标题 "bilibili自动上传视频(纯ruby)" 指出的是一个使用Ruby编程语言编写的脚本或工具,其主要功能是自动化上传视频到B站(哔哩哔哩,Bilibili)平台。这个工具特别强调了“纯ruby”,意味着它没有依赖其他非Ruby...

    在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境

    上传至服务器,解压、执行脚本,具体步骤详见这里 $ mv sh.zip /home/tmp/ & cd /home/tmp $ unzip sh.zip $ chmod -R 777 sh & cd sh # 任意选择一种方法执行脚本 # 方法一 $ ./install.sh # 方法二 $ ./install_...

    ruby下载太慢保存下

    2. **离线下载**:如果有人已经下载了你需要的Ruby版本,比如压缩包文件“ruby-2.6.6”,可以通过共享文件或上传到云存储服务,然后从那里下载,避免网络延迟。 3. **利用缓存**:如果你在公司或家庭网络中,可以...

    ruby-runtime手动插件.zip

    2. 如果你的 Jenkins 服务器上没有安装特定版本的 Ruby,可以通过插件提供的功能进行自动下载和安装。 3. 你可以为每个 Jenkins 项目单独配置 Ruby 版本,以满足不同项目的依赖需求。 4. 配置好后,插件会在执行构建...

    Ruby-fastlane快车道Fastfile脚本gym文件编写套用自动打包ipa上传蒲公英AppStore

    desc "打包并上传到蒲公英" lane :build_and_upload_to蒲公英 do # 清理旧的构建 clean_build_artifacts # 使用gym构建IPA gym(scheme: "YourAppScheme", export_method: "ad-hoc") # 替换为你的应用scheme ...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    在Rails 2.2.3时代,社区已经发展出很多插件和 gems(Ruby的扩展库),如Devise用于身份验证,CanCanCan进行授权管理,Paperclip或Carrierwave处理文件上传等。虽然这些可能需要适配老版本,但它们能极大地增强你的...

    ruby使用restclient上传服务器本地文件示例

    使用RestClient上传服务器本地文件 代码如下:url = ‘http://xx’ #post到urlfield_hash = {key: key, token: token} #post数据request = RestClient.post url, field_hash.merge(file: File.new(File.join(...

    net-ssh远程访问linux ruby

    Net::SSH是Ruby的一个开源库,它提供了SSH2协议的实现,允许开发者通过SSH协议安全地执行命令、传输文件等操作在远程Linux服务器上。 在Ruby中,Net::SSH库使得远程系统管理变得更加便捷。使用这个库,你可以执行...

    ruby_on_rails安装部署指导手册

    - 下载 Ruby 和 RubyGems 的软件包,并拷贝到 RVM 的指定目录。 - 禁用 RVM 自动解决依赖问题:`rvm autolibs read-fail`。 - 获取当前环境中缺少的依赖包:`rvm requirements`。 #### 七、安装 Ruby 和 RubyGems -...

    ruby-2.4.5.tar.gz

    Ruby是一种面向对象的、动态类型的脚本语言,常用于Web开发、服务器管理和其他各种用途。版本号2.4.5表示这是Ruby的一个稳定版本,发布于2018年,包含了自2.4.0以来的多次更新和修复。 描述中提到的"官网下载可能很...

    服务器云网盘源码V3版本

    【服务器云网盘源码V3版本】是一个用于构建自定义云存储平台的软件解决方案,专为想要在自己的网站上实现类似 Dropbox 或 Google Drive 功能的用户设计。这个V3版本意味着它经过了多次迭代和优化,以提供更好的性能...

    curl服务器和上传

    **curl服务器和上传** 在IT领域,`curl`是一个强大的命令行工具,用于传输数据到或从服务器。它支持多种协议,包括HTTP、HTTPS、FTP、FTPS等,广泛应用于Linux系统中。`curl`不仅可以用来下载文件,还可以执行POST...

    ruby on rails在线考试系统

    9. 布署与服务器配置:Rails应用通常部署在如Heroku、AWS或DigitalOcean等云平台上,使用Nginx或Apache作为反向代理,Passenger、Puma或Unicorn作为应用服务器。 10. 性能优化:Rails应用可以通过缓存、数据库索引...

    ruby rails_kindeditor(编译器)插件

    Ruby on Rails 是一个流行的开源 web 开发框架,它基于 Ruby 语言,以其“约定优于配置”的设计理念和 MVC(模型-视图-控制器)架构模式受到开发者喜爱。在开发过程中,有时候我们需要集成富文本编辑器来方便用户...

    Ruby-Backup提供了一个优雅的RubyDSL来在类unix系统中执行备份

    3. **存储目标**:Backup允许用户将备份数据上传到不同的存储目标,如本地文件系统、远程FTP/SFTP服务器、Amazon S3、Google Cloud Storage等。这提供了灾难恢复和地理位置冗余的选项。 4. **通知机制**:Backup...

    rail on ruby

    ### Rails on Ruby 知识点概览 #### 一、Ruby on Rails 概述 - **定义**: Ruby on Rails(简称 Rails 或 RoR)是一种基于 Ruby 语言的 Web 应用开发框架,采用 Model-View-Controller(MVC)架构模式。 - **特点**...

    ruby ftp封装实例详解

    - **功能**:向FTP服务器上传指定的本地文件。 - **参数**:`origin_file` - 本地文件路径,`remote_path` - 服务器上的目标路径。 - **代码实现**: ```ruby def put(origin_file, remote_path) return nil if ...

    Ruby-RubyonRails应用程序的安全注意事项清单

    Ruby on Rails(简称RoR)是一款基于Ruby语言的开源Web应用框架,以其高效、简洁和MVC(模型-视图-控制器)架构而受到开发者喜爱。然而,随着Web应用复杂性的增加,安全性问题也日益凸显。为了确保Ruby on Rails应用...

Global site tag (gtag.js) - Google Analytics