`

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

 

分享到:
评论

相关推荐

    pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

    pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

    matlab建立计算力学课程的笔记和文件.zip

    matlab建立计算力学课程的笔记和文件.zip

    FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

    FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写

    matlab基于RRT和人工势场法混合算法的路径规划.zip

    matlab基于RRT和人工势场法混合算法的路径规划.zip

    matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

    matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

    office 2016三和一精简版

    office 2016三和一精简版

    Scrapy-1.0.2-py2-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡咨询顾问必备宝典-时间管理.ppt

    麦肯锡咨询顾问必备宝典-时间管理.ppt

    setuptools-0.6c10-py2.4.egg

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡顾问的黄金思考方法.pptx

    麦肯锡顾问的黄金思考方法.pptx

    91fdd461elb59a4ce8dfcfc46bc283a7.msi

    91fdd461elb59a4ce8dfcfc46bc283a7.msi

    ansys maxwell

    ansys maxwell

    5-5.py

    5-5

    xx广告促销计划流程实施手册.ppt

    xx广告促销计划流程实施手册.ppt

    仿小米商城微信小程序源码+项目说明.zip

    仿小米商城微信小程序源码+项目说明.zip

    pytest-4.6.0.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Scrapy-2.10.1.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡xx客户满意服务.ppt

    麦肯锡xx客户满意服务.ppt

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    基于python+Scrapy的农业数据爬虫设计与实现

    【作品名称】:基于python+Scrapy的农业数据爬虫设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于Scrapy的农业数据爬虫设计与实现 . ├── Crops # web服务 │ ├── app.py │ ├── static # 静态文件 │ │ ├── css │ │ └── js │ └── templates # 静态页面 │ ├── corn.html │ ├── corns.html │ ├── index.html │ ├── porcor.html │ ├── pork.html │ └── porks.html ├── README.md └── spider # 爬虫及数据处理 ├── integration # 数据汇总 │ └── corn.py └── tutorial # 爬虫 ├── scrap

Global site tag (gtag.js) - Google Analytics