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 ...
随机推荐
- Redis redis-cli 你需要知道这些有用的命令
一.--stat 输出当前 redis 服务节点状态 命令:redis-cli -h host -p port --stat 输出: 连续输出,默认interval 1s 键数 | 内存 | 客户端数 ...
- 重磅官宣,OpenHarmony技术峰会来了
技术构筑万物智联 创新使能行业发展 2月25日 第一届开放原子开源基金会OpenHarmony技术峰会即将启幕 众多行业大咖齐聚深圳 开启一场"技术硬核"探索盛宴 亮点拉满,我 ...
- C# 布尔值和条件语句:入门指南和实用示例
C# 布尔值 在编程中,通常需要一个只能有两个值之一的数据类型,比如: 是 / 否 开 / 关 真 / 假 为此,C# 有一个 bool 数据类型,可以取 true 或 false 的值. 布尔值 使 ...
- Python 数组和列表:创建、访问、添加和删除数组元素
Python 没有内置支持数组,但可以使用 Python 列表来代替. 数组 本页将向您展示如何使用列表作为数组,但要在 Python 中使用数组,您需要导入一个库,比如 NumPy 库.数组用于在一 ...
- Numpy数组变形和轴变换
数组变形(reshape)或轴转换(Transposing Arrays and Swapping Axes)后返回的是非副本视图,对于非副本视图的修改会使原来的数组也同时改变. In [1]: im ...
- Gitee码云:用git上传本地文件到码云gitee的方法
首先登录码云 https://gitee.com/,注册一个账号,并登录账号. 1. 在码云上创建项目 在码云首页顶部,下图所示,右上角头像旁边的加号,鼠标移上去会显示下拉的,点击"新建项目 ...
- MogDB/OpenGauss数据库中通过参数控制抓取慢sql
MogDB/OpenGauss 数据库中通过参数控制抓取慢 sql 本文出处:https://www.modb.pro/db/221556 mogdb 数据库中可以通过打开相应的参数抓取慢 sql,该 ...
- openGauss Cluster Manager RTO Test
一.环境介绍 软件环境 类别 版本 下载链接 备注 OS openEuler 20.03 (LTS) https://repo.openeuler.org/openEuler-20.03-LTS/IS ...
- 第十篇:异步IO、消息队列
一.协程 二.异步IO_Gevent 三.协程异步IO操作 四.事件驱动模型 五.IO多路复用 六.异步IO理论 一.回顾 线程 vs 进程 线程:CPU最小调度单位,内存共享: 线程同时修改同一份数 ...
- JDK 19新特性 & JDK 多版本安装切换配置
新的JDK 19包含如下7个新的特性: 转自:JDK19中比较重要的新特性-电子发烧友网 JEP 405: Record Patterns(Record模式) JEP 422: Linux/RISC- ...