解析使用 camt_parser rails gem 上传的 xml
Parse a xml uploaded with camt_parser rails gem
我在 rails 应用程序中安装了 camt_parser gem。
我的目标是上传和解析 camt_file (.xml).
当我以这种方式从本地文件解析时,它工作得很好:
require 'camt_parser'
require 'camt'
camt = CamtParser::File.parse 'CAMT053_140518.xml'
puts camt.group_header.creation_date_time
camt.statements.each do |statement|
statement.entries.each do |entry|
# Access individual entries/bank transfers
# puts "->"
puts entry.description
puts entry.debit
p entry.transactions[0].iban
p entry.transactions[0].transaction_id
puts entry.transactions[0].debitor.iban
end
end
但是当我尝试使用以下代码将其作为文件从我的视图上传时:
<%= form_tag '/patient_page/import_camt', :multipart => true do %>
<label for="file">Upload text File</label> <%= file_field_tag "file" %>
<%= submit_tag %>
<% end %>
和
对应方法:
def import_camt
uploaded_file = params[:file]
parsed_file = uploaded_file.read
camt = CamtParser::File.parse uploaded_file
puts camt.group_header.creation_date_time
camt.statements.each do |statement|
statement.entries.each do |entry|
puts entry.description
puts entry.debit
p entry.transactions[0].iban
p entry.transactions[0].transaction_id
puts entry.transactions[0].debitor.iban
end
end
end
我收到以下错误
"no implicit conversion of ActionDispatch::Http::UploadedFile into String"
在我尝试解析上传文件时的那一行。
有什么提示吗?
谢谢!
CamtParser::File.parse
需要文件路径,但您传递的是 ActionDispatch::Http::UploadedFile
对象。
当您在 rails 中上传文件时,该文件被包裹在 ActionDispatch::Http::UploadedFile
的实例中。要访问文件本身,有一个名为 tempfile
.
的属性
这将 return Tempfile
表示正在上传的实际文件。 Tempfile
有一个 path
方法,它是文件本身的路径,因此由于 CamtParser::File.parse
需要一个文件路径,它可以按如下方式调用
CamtParser::File.parse(uploaded_file.tempfile.path)
CamtParser
也有一个 String
class 可以解析适当的字符串,因此您可以将其称为
CamtParser::String.parse(uploaded_file.read)
这是有效的,因为 ActionDispatch::Http::UploadedFile
公开了方法 read
,这与调用 uploaded_file.tempfile.read
相同
我在 rails 应用程序中安装了 camt_parser gem。 我的目标是上传和解析 camt_file (.xml).
当我以这种方式从本地文件解析时,它工作得很好:
require 'camt_parser'
require 'camt'
camt = CamtParser::File.parse 'CAMT053_140518.xml'
puts camt.group_header.creation_date_time
camt.statements.each do |statement|
statement.entries.each do |entry|
# Access individual entries/bank transfers
# puts "->"
puts entry.description
puts entry.debit
p entry.transactions[0].iban
p entry.transactions[0].transaction_id
puts entry.transactions[0].debitor.iban
end
end
但是当我尝试使用以下代码将其作为文件从我的视图上传时:
<%= form_tag '/patient_page/import_camt', :multipart => true do %>
<label for="file">Upload text File</label> <%= file_field_tag "file" %>
<%= submit_tag %>
<% end %>
和
对应方法:
def import_camt
uploaded_file = params[:file]
parsed_file = uploaded_file.read
camt = CamtParser::File.parse uploaded_file
puts camt.group_header.creation_date_time
camt.statements.each do |statement|
statement.entries.each do |entry|
puts entry.description
puts entry.debit
p entry.transactions[0].iban
p entry.transactions[0].transaction_id
puts entry.transactions[0].debitor.iban
end
end
end
我收到以下错误
"no implicit conversion of ActionDispatch::Http::UploadedFile into String" 在我尝试解析上传文件时的那一行。
有什么提示吗?
谢谢!
CamtParser::File.parse
需要文件路径,但您传递的是 ActionDispatch::Http::UploadedFile
对象。
当您在 rails 中上传文件时,该文件被包裹在 ActionDispatch::Http::UploadedFile
的实例中。要访问文件本身,有一个名为 tempfile
.
这将 return Tempfile
表示正在上传的实际文件。 Tempfile
有一个 path
方法,它是文件本身的路径,因此由于 CamtParser::File.parse
需要一个文件路径,它可以按如下方式调用
CamtParser::File.parse(uploaded_file.tempfile.path)
CamtParser
也有一个 String
class 可以解析适当的字符串,因此您可以将其称为
CamtParser::String.parse(uploaded_file.read)
这是有效的,因为 ActionDispatch::Http::UploadedFile
公开了方法 read
,这与调用 uploaded_file.tempfile.read