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
分享到:
相关推荐
1. **Ruby on Rails框架**:Ruby上传文件通常是在Ruby on Rails框架下进行的,这是一个用于快速开发Web应用的全栈框架,它遵循MVC(模型-视图-控制器)架构模式。 2. **Controller**:在Rails中,控制器负责处理...
gcm, 在通过谷歌云消息传递( GCM )的设备上,gem 可以帮助开发者从 ruby 后端服务器发送数据到他们的移动应用程序 用于Android和iOS的Google云消息传送( GCM ) GCM gem 允许你的ruby 后端通过 Google云消息向Android...
标题 "bilibili自动上传视频(纯ruby)" 指出的是一个使用Ruby编程语言编写的脚本或工具,其主要功能是自动化上传视频到B站(哔哩哔哩,Bilibili)平台。这个工具特别强调了“纯ruby”,意味着它没有依赖其他非Ruby...
上传至服务器,解压、执行脚本,具体步骤详见这里 $ mv sh.zip /home/tmp/ & cd /home/tmp $ unzip sh.zip $ chmod -R 777 sh & cd sh # 任意选择一种方法执行脚本 # 方法一 $ ./install.sh # 方法二 $ ./install_...
2. **离线下载**:如果有人已经下载了你需要的Ruby版本,比如压缩包文件“ruby-2.6.6”,可以通过共享文件或上传到云存储服务,然后从那里下载,避免网络延迟。 3. **利用缓存**:如果你在公司或家庭网络中,可以...
2. 如果你的 Jenkins 服务器上没有安装特定版本的 Ruby,可以通过插件提供的功能进行自动下载和安装。 3. 你可以为每个 Jenkins 项目单独配置 Ruby 版本,以满足不同项目的依赖需求。 4. 配置好后,插件会在执行构建...
desc "打包并上传到蒲公英" lane :build_and_upload_to蒲公英 do # 清理旧的构建 clean_build_artifacts # 使用gym构建IPA gym(scheme: "YourAppScheme", export_method: "ad-hoc") # 替换为你的应用scheme ...
在Rails 2.2.3时代,社区已经发展出很多插件和 gems(Ruby的扩展库),如Devise用于身份验证,CanCanCan进行授权管理,Paperclip或Carrierwave处理文件上传等。虽然这些可能需要适配老版本,但它们能极大地增强你的...
使用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是Ruby的一个开源库,它提供了SSH2协议的实现,允许开发者通过SSH协议安全地执行命令、传输文件等操作在远程Linux服务器上。 在Ruby中,Net::SSH库使得远程系统管理变得更加便捷。使用这个库,你可以执行...
- 下载 Ruby 和 RubyGems 的软件包,并拷贝到 RVM 的指定目录。 - 禁用 RVM 自动解决依赖问题:`rvm autolibs read-fail`。 - 获取当前环境中缺少的依赖包:`rvm requirements`。 #### 七、安装 Ruby 和 RubyGems -...
Ruby是一种面向对象的、动态类型的脚本语言,常用于Web开发、服务器管理和其他各种用途。版本号2.4.5表示这是Ruby的一个稳定版本,发布于2018年,包含了自2.4.0以来的多次更新和修复。 描述中提到的"官网下载可能很...
【服务器云网盘源码V3版本】是一个用于构建自定义云存储平台的软件解决方案,专为想要在自己的网站上实现类似 Dropbox 或 Google Drive 功能的用户设计。这个V3版本意味着它经过了多次迭代和优化,以提供更好的性能...
**curl服务器和上传** 在IT领域,`curl`是一个强大的命令行工具,用于传输数据到或从服务器。它支持多种协议,包括HTTP、HTTPS、FTP、FTPS等,广泛应用于Linux系统中。`curl`不仅可以用来下载文件,还可以执行POST...
9. 布署与服务器配置:Rails应用通常部署在如Heroku、AWS或DigitalOcean等云平台上,使用Nginx或Apache作为反向代理,Passenger、Puma或Unicorn作为应用服务器。 10. 性能优化:Rails应用可以通过缓存、数据库索引...
Ruby on Rails 是一个流行的开源 web 开发框架,它基于 Ruby 语言,以其“约定优于配置”的设计理念和 MVC(模型-视图-控制器)架构模式受到开发者喜爱。在开发过程中,有时候我们需要集成富文本编辑器来方便用户...
3. **存储目标**:Backup允许用户将备份数据上传到不同的存储目标,如本地文件系统、远程FTP/SFTP服务器、Amazon S3、Google Cloud Storage等。这提供了灾难恢复和地理位置冗余的选项。 4. **通知机制**:Backup...
### Rails on Ruby 知识点概览 #### 一、Ruby on Rails 概述 - **定义**: Ruby on Rails(简称 Rails 或 RoR)是一种基于 Ruby 语言的 Web 应用开发框架,采用 Model-View-Controller(MVC)架构模式。 - **特点**...
- **功能**:向FTP服务器上传指定的本地文件。 - **参数**:`origin_file` - 本地文件路径,`remote_path` - 服务器上的目标路径。 - **代码实现**: ```ruby def put(origin_file, remote_path) return nil if ...
Ruby on Rails(简称RoR)是一款基于Ruby语言的开源Web应用框架,以其高效、简洁和MVC(模型-视图-控制器)架构而受到开发者喜爱。然而,随着Web应用复杂性的增加,安全性问题也日益凸显。为了确保Ruby on Rails应用...