Ruby on rails 将 base64 保存为 xlsx(或 pdf 或 word)并用回形针保存
Ruby on rails save base64 to xlsx (or pdf or word) and save it with paperclip
我有一个像这样的 base64
,它是我在 line.It 上为 xlsx
文件生成的。我想解码它并使用 paperclip
将其保存在数据库中,所以我这样做了:
decoded_data = Base64.decode64(Base64)
data = StringIO.new(decoded_data)
data.class_eval do
attr_accessor :content_type, :original_filename
end
data.content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Model.create(file: data)
它创建了一个文件并将其保存在数据库中,但该文件已损坏。我已经在 image
和 image content type
上试过了,没问题,但是 pdf
、word
和 xlsx
就不行了。你有什么线索吗?
提前致谢。
我已经解决了这个问题。问题出在内容 type.When 我试图通过 rails_admin
存储文件 file_content_type 是:
for xlsx file content_type = "application/zip"
for csv file content_type = "text/plain"
for pdf file content_type = "application/pdf"
for word file content_type = "application/zip"
for image file content_type = "image"
但是当我尝试存储 base64 文件时,content_type
完全不同,如下所示:
for xlsx file content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
for csv file content_type = "text/plain"
for pdf file content_type = "application/pdf"
for word file content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
for image file content_type = "image/jpg"
所以我更换了正确的类型并解决了问题。
decoded_data = Base64.decode64(modified_base64)
data = StringIO.new(decoded_data)
data.class_eval do
attr_accessor :content_type, :original_filename
end
if params[:contentType] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
@content_type = "application/zip"
elsif params[:contentType] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
@content_type = "application/zip"
elsif params[:contentType] == "text/plain"
@content_type = "text/plain"
elsif params[:contentType] == "application/pdf"
@content_type = "application/pdf"
elsif params[:contentType].include?('image')
@content_type = "imgae"
end
data.content_type = @content_type
data.original_filename = params[:file_name]
并且不要忘记设置文件名,例如如果文件是 xlsx
你可以将其命名为 sample.xlsx
这很重要。
我有一个像这样的 base64
,它是我在 line.It 上为 xlsx
文件生成的。我想解码它并使用 paperclip
将其保存在数据库中,所以我这样做了:
decoded_data = Base64.decode64(Base64)
data = StringIO.new(decoded_data)
data.class_eval do
attr_accessor :content_type, :original_filename
end
data.content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Model.create(file: data)
它创建了一个文件并将其保存在数据库中,但该文件已损坏。我已经在 image
和 image content type
上试过了,没问题,但是 pdf
、word
和 xlsx
就不行了。你有什么线索吗?
提前致谢。
我已经解决了这个问题。问题出在内容 type.When 我试图通过 rails_admin
存储文件 file_content_type 是:
for xlsx file content_type = "application/zip"
for csv file content_type = "text/plain"
for pdf file content_type = "application/pdf"
for word file content_type = "application/zip"
for image file content_type = "image"
但是当我尝试存储 base64 文件时,content_type
完全不同,如下所示:
for xlsx file content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
for csv file content_type = "text/plain"
for pdf file content_type = "application/pdf"
for word file content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
for image file content_type = "image/jpg"
所以我更换了正确的类型并解决了问题。
decoded_data = Base64.decode64(modified_base64)
data = StringIO.new(decoded_data)
data.class_eval do
attr_accessor :content_type, :original_filename
end
if params[:contentType] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
@content_type = "application/zip"
elsif params[:contentType] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
@content_type = "application/zip"
elsif params[:contentType] == "text/plain"
@content_type = "text/plain"
elsif params[:contentType] == "application/pdf"
@content_type = "application/pdf"
elsif params[:contentType].include?('image')
@content_type = "imgae"
end
data.content_type = @content_type
data.original_filename = params[:file_name]
并且不要忘记设置文件名,例如如果文件是 xlsx
你可以将其命名为 sample.xlsx
这很重要。