Class: ActFunc::Fileupload

Inherits:
Object
  • Object
show all
Defined in:
lib/act_func/fileupload.rb

Class Method Summary collapse

Class Method Details

.file_format(filename) ⇒ Object

get file format params: filename->file’s name return: file format ‘.jpg’,‘.exe’



66
67
68
# File 'lib/act_func/fileupload.rb', line 66

def Fileupload.file_format(filename)
  /\.[^\.]+$/.match(filename)[0]
end

.filename_validata(file, rule) ⇒ Object

validate file format params: file-> file stream; rule-> validate rule (“jpg|xls”) return: validate result -> true | false



45
46
47
# File 'lib/act_func/fileupload.rb', line 45

def Fileupload.filename_validata(file, rule)
  !eval("/\.(#{rule})+$/").match(file.original_filename).blank?
end

.getname(filestream, filepath) ⇒ Object

get new file’s name params:filestream->file stream file name,filepath->file save path return:new file’s name



52
53
54
55
56
57
58
59
60
61
# File 'lib/act_func/fileupload.rb', line 52

def Fileupload.getname(filestream, filepath)
  file_for = Fileupload.file_format(filestream.original_filename)
  filename = Time.now.strftime("%Y%m%d%h%m%s")<<rand(99999).to_s<<file_for
  file = filepath+filename
  while File.exist?(file) do
    filename = Time.now.strftime("%Y%m%d%h%m%s")<<rand(99999).to_s<<file_for
    file = filepath+filename
  end
  filename
end

.imageupload(imgfile, filepath = "", rule = "jpg|jpeg", minsize = 0, maxsize = 2000, w = 0, h = 0) ⇒ Object

image upload params: file->file stream; filepath->file save path; rule->can upload file format(“jpg|xls”); minsize and maxsize->minsize<file’s size<maxsize; w->new image width, h->new image height return: true, result: “new filename” or false, result: “error message”



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/act_func/fileupload.rb', line 73

def Fileupload.imageupload(imgfile, filepath="", rule="jpg|jpeg", minsize=0, maxsize=2000, w=0, h=0)
  result = Fileupload.rule_validata(imgfile, rule, minsize, maxsize)
  if result[:state]
    sname = Fileupload.getname(imgfile, filepath)
    begin
      unless Dir::exist?(filepath)
        unless system("mkdir -p #{filepath}")
          return {state: false, result: "目录创建失败,请于管理员联系"}
        end
      end
      File.open(filepath+sname, "wb") do |f|
        f.write(imgfile.read)
      end
      Fileupload.resize(filepath + sname, w, h)
      return {state: true, result: sname}
    rescue
      return {state: false, result: "写入图片失败:#{$!}"}
    end
  else
    return {state: false, result: result[:message]}
  end
end

.resize(imagepath, w, h) ⇒ Object

image resize params: imagepath-> image file path; w-> new image width; h-> new image height



105
106
107
108
109
110
111
112
113
# File 'lib/act_func/fileupload.rb', line 105

def Fileupload.resize(imagepath, w, h)
  img = Magick::Image.read(imagepath)[0]
  if w==0 || h==0
    w=img.columns
    h=img.rows
  end
  newimg = img.resize_to_fill(w, h)
  newimg.write(imagepath)
end

.rmdir(dir) ⇒ Object

delete dir params: dir-> dir path return true or false



99
100
101
# File 'lib/act_func/fileupload.rb', line 99

def Fileupload.rmdir(dir)
  system("rm -rf #{dir}")
end

.rule_validata(file, rule, minsize, maxsize) ⇒ Object

validate file params:file->file stream,rule->can upload file format,minsize<file’s size<maxsize return:true or return false, message: “error message”



31
32
33
34
35
36
37
38
39
40
# File 'lib/act_func/fileupload.rb', line 31

def Fileupload.rule_validata(file, rule, minsize, maxsize)
  rule_for = Fileupload.filename_validata(file, rule)
  unless rule_for
    return {state: false, message: "错误:文件格式不对,只允许上传#{rule}格式!\\n"}
  end
  if file.size<minsize*1024 || file.size>maxsize*1024
    return {state: false, message: "错误:文件大小错误,只允许#{minsize}kb~#{maxsize}kb!\\n"}
  end
  return {state: true}
end

.upload(file, filepath = "", rule = "jpg|xls", minsize = 1, maxsize = 4000) ⇒ Object

file upload params: file->file stream,filepath->file save path,rule->can upload file format(“jpg|xls”),minsize and maxsize->minsize<file’s size<maxsize return: true, result: “new filename” or false, result: “error message”



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/act_func/fileupload.rb', line 6

def Fileupload.upload(file, filepath="", rule="jpg|xls", minsize=1, maxsize=4000)
  result = Fileupload.rule_validata(file, rule, minsize, maxsize)
  if result[:state]
    sname = Fileupload.getname(file, filepath)
    begin
      unless Dir::exist?(filepath)
        unless system("mkdir -p #{filepath}")
          return {state: false, result: "目录创建失败,请于管理员联系"}
        end
      end
      File.open(filepath+sname, "wb") do |f|
        f.write(file.read)
      end
      return {state: true, result: sname}
    rescue
      return {state: false, result: "写入文件失败:#{$!}"}
    end
  else
    return {state: false, result: result[:message]}
  end
end