zgrid 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/class_methods.rb +80 -0
- data/lib/zgrid.rb +27 -0
- metadata +56 -0
@@ -0,0 +1,80 @@
|
|
1
|
+
module Zgrid
|
2
|
+
class << self
|
3
|
+
def save_upload_file(temp,opts={})
|
4
|
+
filepath=temp.tempfile.path
|
5
|
+
filename=temp.original_filename
|
6
|
+
content_type=temp.content_type
|
7
|
+
metadata=opts[:metadata]
|
8
|
+
if opts and (opts[:percent] or opts[:size] or opts[:width])
|
9
|
+
Zbox::QmExt.resize(filepath,opts)
|
10
|
+
end
|
11
|
+
|
12
|
+
save(filepath,filename,content_type,metadata)
|
13
|
+
end
|
14
|
+
|
15
|
+
def save_temp(temp)
|
16
|
+
save(temp.path)
|
17
|
+
end
|
18
|
+
|
19
|
+
def save(filepath,filename=nil,content_type=nil,metadata=nil)
|
20
|
+
filehash={}
|
21
|
+
file_id=FileGrid.put(File.open(filepath),:filename=>filename,:metadata=>metadata)
|
22
|
+
thefile=FileGrid.get(file_id)
|
23
|
+
filehash["grid_id"]=file_id
|
24
|
+
filehash["content_type"]=content_type
|
25
|
+
filehash["length"]=thefile.file_length
|
26
|
+
filehash["filename"]=filename
|
27
|
+
filehash["metadata"]=metadata
|
28
|
+
return filehash
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete(gid)
|
32
|
+
FileGrid.delete(gid)
|
33
|
+
end
|
34
|
+
|
35
|
+
def tempmedias(article=nil)
|
36
|
+
if article
|
37
|
+
DB["fs.files"].find("$or"=>[{"metadata.temp"=>true},{"metadata.caller_id"=>article.id.to_s,"metadata.embed"=>true}])
|
38
|
+
else
|
39
|
+
DB["fs.files"].find("metadata.temp"=>true)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def temp_usedids(article,tempids)
|
44
|
+
embedids=[]
|
45
|
+
tempids.each do |id|
|
46
|
+
embedids<<id if article.body.include?(id.to_s)
|
47
|
+
end
|
48
|
+
docs=DB["fs.files"].find("_id"=>{"$in"=>embedids})
|
49
|
+
fns=docs.map{|doc| doc["filename"]}
|
50
|
+
usedfiles=DB["fs.files"].find("filename"=>{"$in"=>fns},"$or"=>[{"metadata.temp" => true},{"metadata.caller_id"=>article.id.to_s,"metadata.embed"=>true}])
|
51
|
+
usedfiles.map{|f| f["_id"]}
|
52
|
+
end
|
53
|
+
|
54
|
+
def handle_tempmedias(article,action=nil)
|
55
|
+
medias = action ? tempmedias(article) : tempmedias
|
56
|
+
tempids = medias.map{|t| t["_id"]}
|
57
|
+
unless medias.count.zero?
|
58
|
+
usedids=temp_usedids(article,tempids)
|
59
|
+
unusedids=tempids-usedids
|
60
|
+
usedids.each do |usedid|
|
61
|
+
DB["fs.files"].update({"_id" => usedid}, {"$unset" => {"metadata.temp" => true },"$set"=>{"metadata.caller_id"=>article.id.to_s,"metadata.embed"=>true}})
|
62
|
+
end
|
63
|
+
unusedids.each do |unusedid|
|
64
|
+
delete(unusedid)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def rm_caller_files(caller_id)
|
70
|
+
cursor=DB["fs.files"].find("metadata.caller_id" => caller_id.to_s)
|
71
|
+
if cursor
|
72
|
+
ids=[]
|
73
|
+
cursor.to_a.each {|h| ids<<h["_id"]}
|
74
|
+
ids.each {|id| FileGrid.delete(id)}
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/lib/zgrid.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#-*- encoding: utf-8 -*-
|
2
|
+
require "class_methods"
|
3
|
+
require "sinatra/base"
|
4
|
+
class Mygrid < Sinatra::Base
|
5
|
+
get "/grid/see/:gid" do
|
6
|
+
id=BSON::ObjectId.from_string(params[:gid])
|
7
|
+
if FileGrid.exist?(id)
|
8
|
+
f=FileGrid.get(id)
|
9
|
+
send_data f.read,:type=>f.content_type,:filename=>f.filename,:disposition=>"inline"
|
10
|
+
response.headers['Content-Type'] = f.content_type
|
11
|
+
else
|
12
|
+
render :text=>"文件不存在"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
get "/grid/remove/:gid" do
|
17
|
+
id=BSON::ObjectId.from_string(params[:gid])
|
18
|
+
if Zgrid.delete(id)
|
19
|
+
respond_to do |format|
|
20
|
+
# format.html { redirect_to(promotion_types_url) }
|
21
|
+
format.html {redirect_to :back}
|
22
|
+
#format.js {render :js => "alert('删除成功');"}
|
23
|
+
#format.xml { head :ok }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zgrid
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- zxy
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-07-06 00:00:00 Z
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: an engine for handle mongo gridfs
|
17
|
+
email:
|
18
|
+
- zxy@qq.com
|
19
|
+
executables: []
|
20
|
+
|
21
|
+
extensions: []
|
22
|
+
|
23
|
+
extra_rdoc_files: []
|
24
|
+
|
25
|
+
files:
|
26
|
+
- lib/zgrid.rb
|
27
|
+
- lib/class_methods.rb
|
28
|
+
homepage: ""
|
29
|
+
licenses: []
|
30
|
+
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: "0"
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
requirements: []
|
49
|
+
|
50
|
+
rubyforge_project: zgrid
|
51
|
+
rubygems_version: 1.8.5
|
52
|
+
signing_key:
|
53
|
+
specification_version: 3
|
54
|
+
summary: an engine for handle mongo gridfs
|
55
|
+
test_files: []
|
56
|
+
|