rails 上传文件
控制器文件
app/controllers/api/v1/order_controller.rb
def create
# 从本地读取
log_dir = File.expand_path(File.join(Rails.root.to_s,'/log/ip04.log'))
puts "log_dir: #{log_dir}"
file = File.open(log_dir)
puts "file: #{file} file.size:#{file.size} #{(file.size.to_f/1024/1024).round(2)}mb"
puts "File::size?: #{File::size?( log_dir)}"
puts "File::exist?( path): #{File::exist?( log_dir)}"
puts "file.atime: #{file.atime}"
puts "file.log_dir: #{File.extname(log_dir)}"
# form表单上传
file = params[:file] #上传的key名为file
puts "@file #{file}"
# {"file"=>#<ActionDispatch::Http::UploadedFile:0x00007f3bf09cc510 @tempfile=#<Tempfile:/tmp/RackMultipart20210807-28560-1ld7wxc.txt>, @original_filename="ip1000_v1_res_uniq.txt", @content_type="text/plain", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"ip1000_v1_res_uniq.txt\"\r\nContent-Type: text/plain\r\n">}
puts "@original_filename #{file.original_filename}"
puts "@basename #{File::basename(file.original_filename)}"
puts "@size11 #{ (File::size(file.tempfile).to_f/1024/1024)}mb" #@size11 0.00013637542724609375mb
puts "@zise22 #{file.size}" #@zise22 143
puts "11111"
if file.size.blank? || !File.extname(file.original_filename).downcase.in?([".txt"])
render(json:{msg:"file is empty! or is not txt"})
return
end
filename = uploadfile(file)
puts "filename:#{filename}"
render(json:{msg:"ok"})
end
# 上传文件
def uploadfile(file)
if !file.original_filename.empty?
dir_path = get_upload_dir_path
#设置目录路径,如果目录不存在,生成新目录
FileUtils.mkdir_p(dir_path, :mode => 2750) unless File.exist?(dir_path)
#写入文件
##wb 表示通过二进制方式写,可以保证文件不损坏
filename = "#{Time.now.strftime('%Y%m%d%H%M%S')}_#{file.original_filename}"
filename_path = dir_path + filename
File.open(filename_path, "wb") do |f|
f.write(file.read)
end
return filename
end
end
# 上传文件的目录
def get_upload_dir_path(upload_file_path = "/public/upload/category_statistics/")
@upload_file_path = "#{Rails.root}#{upload_file_path}"
end
postman 上传

效果

控制器里获取传参
# {
# "type": "ip"
# }
def create2
# 接收单个参数
# q = params[:q]
# 读取所有body 去掉回车换行,方便base64
str = request.body.read
puts "str: #{str}"
if str.blank?
Rails.logger.error("body内容不能为空")
return { status: false, error_code: 1, error_msg: "body内容不能为空" }
end
# {"type": "ip"}
body_json = JSON.parse(str)
p_type = body_json["type"]
puts "body_json: #{body_json} #{body_json["type"]}"
case p_type
when "ip"
puts "ip"
# save_ip
save_parent_cate
else
puts "不支持"
res = { code: 400, msg: "不支持 type:#{p_type}" }
render(json: res)
end
end
rails 上传文件的更多相关文章
- Rails上传文件
1.view <%= form_tag({:method =>"post",:controller =>"welcome",:action=& ...
- Ajax.BeginForm 上传文件
在 Mvc 中上传文件时通常使用 Html.BeginForm 标签,同时对Form 添加属性 enctype = "multipart/form-data",前端代码如下: @H ...
- IE8/9 JQuery.Ajax 上传文件无效
IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...
- 三种上传文件不刷新页面的方法讨论:iframe/FormData/FileReader
发请求有两种方式,一种是用ajax,另一种是用form提交,默认的form提交如果不做处理的话,会使页面重定向.以一个简单的demo做说明: html如下所示,请求的路径action为"up ...
- asp.net mvc 上传文件
转至:http://www.cnblogs.com/fonour/p/ajaxFileUpload.html 0.下载 http://files.cnblogs.com/files/fonour/aj ...
- app端上传文件至服务器后台,web端上传文件存储到服务器
1.android前端发送服务器请求 在spring-mvc.xml 将过滤屏蔽(如果不屏蔽 ,文件流为空) <!-- <bean id="multipartResolver&q ...
- .net FTP上传文件
FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- 前端之web上传文件的方式
前端之web上传文件的方式 本节内容 web上传文件方式介绍 form上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe构造请求上传文件 1. web上传 ...
- Django session cookie 上传文件、详解
session 在这里先说session 配置URL from django.conf.urls import patterns, include, url from django.contrib i ...
随机推荐
- KingbaseES 逻辑读与物理读
oracle数据库中逻辑读,物理读 数据访问方式:数据库少不了和操作系统进行数据交互,表数据最好的方式是从数据库共享池中访问到,避免发生磁盘IO,当然如果共享池中没有访问到数据就难免发生磁盘IO. 物 ...
- KingbaseES 查询优化消除SubPlan
说明: 日常业务系统在使用SQL语句进行查询时,开发人员容易将sql查询的子查询放到select语句中进行使用,会造成sql性能的下降. 数据准备: test=# test=# select coun ...
- UE4蓝图对Actor的引用
通过关卡蓝图调用 在关卡中放置一个Actor,在关卡蓝图中右键 create a reference to actor,即可 注意使用该方法创建时,需要现在关卡中选择上该类Actor 当Actor生成 ...
- NET Core使用Grpc通信(一):一元
gRPC是一个现代的开源高性能远程过程调用(RPC)框架,它可以高效地连接数据中心内和跨数据中心的服务,支持负载平衡.跟踪.运行状况检查和身份验证. gRPC通过使用 Protocol Buffers ...
- #DP#CF9D How many trees?
题目 用\(n\)个点组成二叉树,问高度\(\geq h\)的有多少个. 分析 首先前缀和相减就能得到答案,做dp 设\(dp[n][h]\)表示节点数为\(n\),高度不超过\(h\)的树的个数 那 ...
- Git 删除 .gitignore 生成之前上传的文件
清除缓存 git rm -r --cached . git add . 提交记录 git commit -m "chore: 清除缓存." git push
- 深入理解HashMap和TreeMap的区别
目录 简介 HashMap和TreeMap本质区别 排序区别 Null值的区别 性能区别 共同点 深入理解HashMap和TreeMap的区别 简介 HashMap和TreeMap是Map家族中非常常 ...
- Python 中的字符串基础与应用
在Python中,字符串可以用单引号或双引号括起来.'hello' 与 "hello" 是相同的.您可以使用print()函数显示字符串文字: 示例: print("He ...
- opengauss数据库-主从搭建
opengauss 数据库-主从搭建 环境说明 软件下载 opengauss 下载地址:https://opengauss.org/zh/download/ 环境准备 关闭 SELINUX 修改 /e ...
- CentOS-6.4启动盘制作过程
目标机器:ThinkPad X230 (i5-3210, 4G DDR3, 500G 7200转),预装win 8 目标系统:CentOS-6.4-x86_64-bin-DVD1.iso 主要参考文章 ...