gpt4 book ai didi

ruby-on-rails - 如何使用事件存储读取.xlsx文件数据

转载 作者:行者123 更新时间:2023-12-02 11:04:02 25 4
gpt4 key购买 nike

我有这个类(class),并且我正在使用主动存储

class DataSheet < ApplicationRecord
belongs_to :admin

has_one_attached :excel_file
after_save :create_user
end

我知道有很多 gem creek , write_xlsx_rails , roo读取或写入 .xlsx 文件,但它们都需要文件的物理位置。以前,我用过 creek gem读取 .xlsx 文件,但我必须将该文件保存在本地。

class LocalFileUploader


attr_reader :file

def initialize(file = nil)
@file = file
end

def save
file_path = Rails.root.join('storage', file.original_filename)
IO.copy_stream(file.path, file_path)
return file_path.to_s
end

end

现在我正在使用active storage它将 .xlsx 文件存储为二进制文件。我无法找到一种方法将该文件读取为 xlsx 文件。尽管主动存储提供download获取文件二进制数据的方法。

pry(#<DataSheet>)> self.excel_file
=> #<ActiveStorage::Attached::One:0x007f9db0607750
@dependent=:purge_later,
@name="excel_file",
@record=#<DataSheet:0x007f9db811ba40 id: 3, admin_id: 1, created_at: Mon, 28 May 2018 01:33:06 UTC +00:00, updated_at: Mon, 28 May 2018 01:33:06 UTC +00:00>>

[3] pry(#<DataSheet>)> self.excel_file.blob
=> #<ActiveStorage::Blob:0x007f9db81125f8
id: 6,
key: "TBitz1dEzma2R2uTgtEoJ7X1",
filename: "faizabad 1424.xlsx",
content_type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
metadata: {"identified"=>true},
byte_size: 374211,
checksum: "/shAXf0kEnYV4DGl0z3fng==",
created_at: Mon, 28 May 2018 01:33:06 UTC +00:00>

[4] pry(#<DataSheet>)> SimpleXlsxReader.open self.excel_file.blob
TypeError: no implicit conversion of ActiveStorage::Blob into String
from /home/rotlu_crush/.rvm/gems/ruby-2.4.1/gems/rubyzip-1.2.1/lib/zip/file.rb:73:in `size?'
[5] pry(#<DataSheet>)> SimpleXlsxReader.open self.excel_file.blob.download
Disk Storage (0.6ms) Downloaded file from key: TBitz1dEzma2R2uTgtEoJ7X1
ArgumentError: string contains null byte
from /home/rotlu_crush/.rvm/gems/ruby-2.4.1/gems/rubyzip-1.2.1/lib/zip/file.rb:73:in `size?'

我在某个地方读过一个例子 read csv file data with active storage通过将二进制数据解析为 csv 之类的。

CSV.parse(materials_upload.csv_file.download, headers: true) do |row|
# ...
end

有什么方法可以读取带有事件存储的 Excel 文件吗?

最佳答案

Rails 6 将添加 ActiveStorage::Blob#open ,它将 blob 下载到临时文件:

data_sheet.excel_file.open do |file|
# Operate on the file
end

您现在可以从 GitHub 捆绑 Rails 来使用此功能:

gem "rails", github: "rails/rails"

关于ruby-on-rails - 如何使用事件存储读取.xlsx文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com