首页 > 其他分享 >Rails ActionDispatch::Http::UploadedFile to File

Rails ActionDispatch::Http::UploadedFile to File

时间:2023-12-20 09:12:13浏览次数:29  
标签:uploaded Http File filename ActionDispatch file path

RailsでFileをActionDispatch::Http::UploadedFileに変換する方法

require 'mime/types'

File.open(path) do |file|
  filename =  File.basename(file.path),
  ActionDispatch::Http::UploadedFile.new(filename: filename, type: MIME::Types.type_for(filename).first.to_s, tempfile: file))
end

# eg:
MIME::Types.type_for("filename.gif").first.content_type # => "image/gif"


# アップロードファイル情報
uploaded_file = params[:file]
→ActionDispatch::Http::UploadedFile型でアップロードしたファイルの情報が返ってくる。
 以降、uploaded_fileは「ActionDispatch::Http::UploadedFile」のインスタンスになっていることを意識。


# ファイル名
uploaded_file.original_filename
→String型でファイル名(パスを含まず、拡張子を伴うもの)が返ってくる(xxx.csvとか)


# コンテンツタイプ
uploaded_file.content_type
→String型でMIME_TYPEが返ってくる(text/csv とか)


# アップロードされたファイルのTempfileインスタンス
uploaded_file.tempfile
→ファイルをformからアップロードすると、tempfileインスタンスが作られ、リクエストに対するサーバー側での一連の処理終了後に削除される模様。


# Tempfileインスタンスを経由するショートカットメソッド群
## 一時ファイルのサイズ
uploaded_file.size
→Integer型でファイルサイズ(バイト単位)が返ってくる


## 一時ファイル本体の読み込み
uploaded_file.read
→String型で読み込んだ全行分の文字列が返ってくる


## 一時ファイルのパス
uploaded_file.path
→String型でパスが返ってくる


# アップロードファイル情報を取得
uploaded_file = params[:file]


# アップロードファイル(一時ファイル)パス
uploaded_temp_file_path = uploaded_file.path


# アップロードファイル(元ファイル)名
uploaded_file_original_file_name = uploaded_file.original_filename


# アップロードファイル(一時ファイル)を全行分読み込んだもの
uploaded_file_content = uploaded_file.read


# 保存先ディレクトリパス
save_dir_path = Pathname("/aaa/")


# 保存先ディレクトリを作成
run_cmd("mkdir -p #{save_dir_path}")


# 保存先ファイルパス
save_file_path = save_dir_path.join(uploaded_file_original_file_name)


# ファイルを保存(〜へ〜を書き込むという引数順序)
File.binwrite(save_file_path, uploaded_file_content)

 

 

标签:uploaded,Http,File,filename,ActionDispatch,file,path
From: https://www.cnblogs.com/hello-ruby/p/17915362.html

相关文章

  • apache HttpClient异常-ProtocolException: Target host is not specified
    昨夜,甘肃临夏州积石山县发生6.2级地震,影响到甘肃、青海地区。截至目前,已有100多人遇难。百度了一下当地天气,还挺冷,夜间温度低到-15℃。时间就是生命,祈祷难民尽快得到救援!  分享今天解决的一个生产问题告警。如下HTTP工具类中的httpClientPost方法使用apache的HttpClient(ma......
  • C# HttpPostedFile传值,储存
    HttpContext.Current.Request.Files附件保存接口实现///<summary>///Post请求,Params传参///</summary>///<paramname="url"></param>///<paramname="onHeading"></param>......
  • Linux传输文件(FileZilla)和远程登录(MobaxTerm)软件的使用
    说明:SSH默认走22端口,FTP默认走21,我们使用的是22端口,即SFTP,其默认也是22端口。1、查看22端口是否被监听:netstat-ntlp|grep22  1.1、没被监听:    sudoapt-getinstallufw    sudoufwenable      sudoufwallow222、Linux端安装SSHServer    s......
  • Java http请求json数据
    publicstaticStringsendJson(Stringurl,Stringjson){StringreturnValue="调用接口失败";CloseableHttpClienthttpClient=HttpClients.createDefault();ResponseHandler<String>responseHandler=newBasicResponseHandler();try{......
  • 异步记录第三方接口调用日志的优雅实现(HttpClient+装饰者模式+异步线程池)
    对于第三方接口调用日志这个功能,笔者在工作中曾见过以下两种方式:Restemplate+装饰者模式+MQ实现网关监控+Feign拦截器+观察者模式实现其中观察者模式的实现是我最为佩服的设计,个人认为以上两种实现都显得略过臃肿,应该简化设计,让异步记录的实现更加简洁优雅,因此产生了这样......
  • Nacos启动:[NACOS HTTP-POST] The maximum number of tolerable server reconnection e
    一、表象二、分析源码:publicHttpRestResult<String>httpPost(Stringpath,Map<String,String>headers,Map<String,String>paramValues,Stringencode,longreadTimeoutMs)throwsException{finallongendTime=System.currentTi......
  • HTTP事件流 text/event-stream
    GitHubAll-in-oneOpenAIDemo一、依赖<dependency><groupId>org.asynchttpclient</groupId><artifactId>async-http-client</artifactId><version>2.12.3</version></dependency>二、事件流处理器@Slf4jpublicclass......
  • C#利用自带的ZipFile压缩和解压zip文件,超级简单
    C#利用自带的ZipFile压缩和解压zip文件,超级简单翔星有10年+工作经验,高级软件工程师,可以解决各种问题​关注 你经常看TA的内容ZipFile类是.NETFramework4.5发布的一个C#压缩文件和解压zip文件的一个类库,它支持.NETFramework4.5以上版本,包......
  • HTTP事件流 text/event-stream
    GitHubAll-in-oneOpenAIDemo一、依赖<dependency><groupId>org.asynchttpclient</groupId><artifactId>async-http-client</artifactId><version>2.12.3</version></dependency>二、事件流处理器@Slf4jpublicclass......
  • 查看mvn版本:cannot execute binary file
    一、现象二、原因网络资料上大部分的原因是因为jdk不是46位导致失败。其实我这边的原因也查不多,目前使用的是MacM2芯片的电脑但是还安装之前的jdk版本,将其替换为macosarm版本即可。三、操作JDK下载官网下载、解压并更新环境变量四、修复......