代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Rails
】
简单的文件上传类,仅上传文件
作者:
天佑
/ 发布于
2016/8/16
/
989
#encoding: utf-8 require 'fileutils' class UploadException < RuntimeError; end #上传文件 class UploadFile def initialize(configs) @upload_path = "#{Rails.root}/data" @type = @max_size = @random_dir = nil configs.each do |key, value| if config_keys.include? key self.send("#{key}=", value) end end FileUtils.mkdir(@upload_path, mode: 0766) unless File.directory? @upload_path FileUtils.chmod(0766, @upload_path) unless File.writable_real?(@upload_path) ((0..9).to_a + ('a'..'z').to_a).each &method(:check_and_mkdir) if random_dir? end def upload(file) raise UploadException, '文件不是图片格式' if @type == 'image' && !self.is_image?(file) file_size = File.size file.tempfile file_name = file.original_filename raise UploadException, "文件大小超出限制的大小#{@max_size}" if (@max_size && file_size > @max_size.to_i) raise UploadException, "上传目录不是目录或不能写入" unless (File.directory?(@upload_path) && File.writable_real?(@upload_path)) file_path = generage_file_name file.original_filename File.open(file_path, 'wb') do |f| f.write file.read end rescue Exception => e raise UploadException, '文件上传失败:' + e.message else {file_name: file_name, file_size: file_size, file_path: file_path} end protected def generage_file_name(original_filename) if original_filename filename = SecureRandom.uuid + File.extname(original_filename) if File.exist? filename generage_file_name(original_filename) else File.join(random_dir, filename) end end end def is_image?(file) `file --mime -b #{file.tempfile.path}` =~ /^image/ end def config_keys [:upload_path, :max_size, :type, :random_dir] end def upload_path=(path) @upload_path = path end def max_size=(size) @max_size = size end def type=(type) @type = type end def random_dir=(random_dir) @random_dir = random_dir end def random_dir? @random_dir end def check_and_mkdir(dir) dir_name = File.join(@upload_path, dir.to_s) Dir.mkdir(dir_name) unless File.directory? dir_name File.new(dir_name, 'w').chmod(0766) end def random_dir random_dir? ? File.join(@upload_path, ((0..9).to_a + ('a'..'z').to_a).sample) : @upload_path end end
试试其它关键字
文件上传
同语言下
.
在 Session 中存放数据
.
为网页(rhtml)初始化数据
.
简单的文件上传类,仅上传文件
.
打印终端256 色
.
rails 中文视频 发邮件
.
2000!大数阶乘
.
递归删除目录
.
操作 Windows 粘贴板
.
验证信用卡账号
.
ruby格式化日期时间
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
天佑
贡献的其它代码
(
7
)
.
Java date format 时间格式化
.
input 的带有lable的选择样式优化
.
拼音相关
.
#重命令表名
.
在.aspx前台使用按钮出发js事件时,可以使用多个方法
.
简单的文件上传类,仅上传文件
.
文本框下拉提示
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3