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
分享到:
相关推荐
gcm, 在通过谷歌云消息传递( GCM )的设备上,gem 可以帮助开发者从 ruby 后端服务器发送数据到他们的移动应用程序 用于Android和iOS的Google云消息传送( GCM ) GCM gem 允许你的ruby 后端通过 Google云消息向Android...
使用RestClient上传服务器本地文件 代码如下:url = ‘http://xx’ #post到urlfield_hash = {key: key, token: token} #post数据request = RestClient.post url, field_hash.merge(file: File.new(File.join(...
上传至服务器,解压、执行脚本,具体步骤详见这里 $ mv sh.zip /home/tmp/ & cd /home/tmp $ unzip sh.zip $ chmod -R 777 sh & cd sh # 任意选择一种方法执行脚本 # 方法一 $ ./install.sh # 方法二 $ ./install_...
用于Ruby服务器。 它实现了核心1.0协议以及以下扩展: (和creation-defer-length ) 安装 # Gemfile gem "tus-server" , "~> 2.3" 用法 gem提供了一个Tus::Server 应用程序,您可以将其安装在主应用程序中。 如果...
与支持标准HTML表单文件上传的任何服务器端平台(PHP,Python,Ruby on Rails,Java,Node.js,Go等)一起使用。 演示版 产品特点 多文件上传: 允许一次选择多个文件并同时上传。 拖放支持: 允许通过从桌面或...
它是最小的单客户端FTP服务器,可以绑定到localhost上的任意端口。 为什么? 我们想要确保我们的代码以与所使用的实现无关的方式工作(不同于存根或模拟)。 如何 FakeFtp是一个简单的FTP服务器,它伪造了足够多的...
WhooMS:Sinatra、Ruby、Mapserver 迷你WMS服务器 安装 你需要 : Sinatra >= 0.9.1 用于使用 send_data 方法 Ruby地图脚本 您可以在 whooms.rb 中更改的任何配置 用法 对于只想提供一个图像并且不想经历设置自己的...
rubyinstaller-devkit-3.0.2-1-x64 and Ruby 学习笔记.7z 由于国内访问github服务器不稳定,所以上传到CSDN给大家方便下载
通过 SSH 将文件上传到您自己的服务器,并将生成的 URL 复制到剪贴板以便于共享。 要求 Ruby Mac OS X 10.8+ 使用Web 服务器来存储文件 设置 gem install uplr --pre 帮助 uplr --help NAME uplr -- Upload ...
登录后,用户可以将照片上传到他们的帐户并在照片中标记其他用户。 安装和使用 运行 Postrges 服务器 克隆或下载此存储库并 cd 到缩进目录 $ rake db:create $ rake db:migrate $ rails server 在浏览器中访问 ...
OpProcessWorker :使用预定义的模板对ruby-grid进行异步服务器端图像处理 上传完成后,将自动应用默认的调整大小。 处理需要改为手动调用。 也可以监视操作状态(警告:尚未注意到故障,即使在2次尝试之后从...
安装安装最新版本: $ gem install carrierwave在Rails中,将其添加到您的Gemfile中: gem 'carrierwave' , '~> 2.0' 最后,重新启动服务器以应用更改。 从2.0版开始,CarrierWave需要Rails 5.0或更高版本以及Ruby ...
| 15 | bundle exec jekyll build | 您只需构建您的站点(而不是在本地提供),然后您可以将生成的文件上传到您的服务器(这将生成与_config.yml中配置变量url的值的规范链接) | | 16 | jekyll clean | 清空编译_site...
尚未发布(此时)此宝石是围绕Ruby包装器,即: 创建存储在生产s3存储桶(A)中的资产的压缩备份到资产备份s3存储桶(B) 提供从资产备份(B)获取资产备份并解压缩命令,然后将其上传到另一个(测试/固定)服务器s3...
Jets允许您使用漂亮的语言:Ruby创建无服务器应用程序。 它包括构建应用程序并将其部署到AWS Lambda所需的一切。 了解AWS Lambda和API网关以从概念上了解Jets至关重要。 Jets会将您的代码映射到Lambda函数和API网关...
EM-HTTP-请求 异步(EventMachine)HTTP客户端,支持: 异步HTTP API,用于执行单个和并行请求保持活动和HTTP... -将Rack API用于服务器,测试和客户端。 支持机架中间件!模块化HTTP客户端库,使用受Rack启发的中间件
有时,您只有FTP权限才能将您的工作部署到FTP服务器,而当您需要记住应该上传哪些文件,应该忽略哪些文件时,这变得越来越可怕了。另一种解决方案是,您可以将整个项目上传到FTP服务器,但成功部署可能需要很长时间...
让我们将其作为Ruby最强大的资源 :purple_heart:命令行工具配置CSS和样式资料验证数据可视化数据库驱动程序日期和时间调试工具DevOps工具分配文献资料下载器电子商务和在线支付电子邮件环境管理学文件上传功能翻转...
这个是一个类似CB的资讯博客系统,已经编译了的,里面有安装的程序,只要上传到服务器,然后按步骤操作就可以使用了!不过界面做得很一般,请原谅!