Class: EducodeSales::UploadFilesController

Inherits:
ApplicationController show all
Defined in:
app/controllers/educode_sales/upload_files_controller.rb

Instance Method Summary collapse

Methods inherited from ApplicationController

#authenticate_admin, #authenticate_request, #current_user, #render_failure, #render_success

Instance Method Details

#createObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 22

def create
  folder = File.join(Rails.root, "public", "files", 'educode_sales')
  upload_file = params["file"]
  raise "未上传文件" unless upload_file
  save_path = File.join(folder)
  ext = file_ext(upload_file.original_filename)
  local_path, digest = file_save_to_local(save_path, upload_file.tempfile, ext)
  content_type = upload_file.content_type.presence || 'application/octet-stream'
  disk_filename = local_path[save_path.size + 1, local_path.size]
  @attachment = Attachment.where(disk_filename: disk_filename,
                                 author_id: @current_admin.user_id).first
  if @attachment.blank?
    @attachment = Attachment.new
    @attachment.filename = upload_file.original_filename
    @attachment.description = "business"
    @attachment.disk_filename = local_path[save_path.size + 1, local_path.size]
    @attachment.filesize = upload_file.tempfile.size
    @attachment.content_type = content_type
    @attachment.digest = digest
    @attachment.author_id = @current_admin.user_id
    @attachment.container_id = params[:business_id]
    @attachment.save!
  else
    logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}"
  end
  render_success
end

#destroyObject



50
51
52
53
54
55
56
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 50

def destroy
  folder = File.join(Rails.root, "public", "files", 'educode_sales')
  file = Attachment.find(params[:id])
  file.destroy
  File.delete(folder +  "/" +file.disk_filename) if FileTest::exist?(folder +  "/" +file.disk_filename)
  render_success
end

#downloadObject



58
59
60
61
62
63
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 58

def download
  folder = File.join(Rails.root, "public", "files", 'educode_sales')
  file = Attachment.find_by_id(params[:id])
  raise "未找到文件" unless file
  send_file(folder +  "/" +file.disk_filename, filename: file.title, stream: true, type: file.content_type.presence || 'application/octet-stream')
end

#edu_setting(name) ⇒ Object



65
66
67
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 65

def edu_setting name
  EduSetting.get(name)
end

#file_ext(file_name) ⇒ Object



70
71
72
73
74
75
76
77
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 70

def file_ext(file_name)
  ext = ''
  exts = file_name.split(".")
  if exts.size > 1
    ext = ".#{exts.last}"
  end
  ext
end

#file_save_to_local(save_path, temp_file, ext) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 79

def file_save_to_local(save_path, temp_file, ext)
  unless Dir.exists?(save_path)
    FileUtils.mkdir_p(save_path) ##不成功这里会抛异常
  end

  digest = md5_file(temp_file)
  digest = "#{digest}_#{(Time.now.to_f * 1000).to_i}"
  local_file_path = File.join(save_path, digest) + ext
  save_temp_file(temp_file, local_file_path)

  [local_file_path, digest]
end

#indexObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 6

def index
  respond_to do |format|
    format.html do
    end
    format.json do
      @files = Attachment.where(description: "business", container_id:params[:business_id])
      if params[:sort].present? && params[:sort][:field]
        @files = @files.order("#{params[:sort][:field]} #{params[:sort][:order]}")
      else
        @files = @files.order("created_on desc")
      end
      @files = @files.page(params[:page]).per(params[:limit])
    end
  end
end

#md5_file(temp_file) ⇒ Object



93
94
95
96
97
98
99
100
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 93

def md5_file(temp_file)
  md5 = Digest::MD5.new
  temp_file.rewind
  while (buffer = temp_file.read(8192))
    md5.update(buffer)
  end
  md5.hexdigest
end

#save_temp_file(temp_file, save_file_path) ⇒ Object



102
103
104
105
106
107
108
109
# File 'app/controllers/educode_sales/upload_files_controller.rb', line 102

def save_temp_file(temp_file, save_file_path)
  File.open(save_file_path, 'wb') do |f|
    temp_file.rewind
    while (buffer = temp_file.read(8192))
      f.write(buffer)
    end
  end
end