我的用户上传了一个包含3个文件(A.ttf,A.svg,A.otf)的zip文件,我想将原始zip和3个字体文件存储在其中。我用这段代码创建了3个版本
version :ttf
process :font => :ttf
end
version :svg
process :font => :svg
end
version :otf
process :font => :otf
end
它成功保存了原始文件的4个副本,所有副本都具有正确的文件名。但是,我不知道如何让CarrierWave存储单个文件。此代码不起作用。 :(
def font(format)
new_file = nil
# Loop through the zip file and extract the files
Zip::ZipFile.open(@file.file) do |files|
files.each do |f|
next unless f.file?
filename = f.name.split("/").last
ext = filename.split('.').last
# Save the file with the proper file extension
new_file = f if ext == format
end
# Return the file to be stored by CarrierWave
new_file
end
答案 0 :(得分:5)
current_path
变量中将其提供给您。你可以用这个文件引用做任何你想做的事情(即打开文件并截断它,或用随机日期等填写它),当你完成后,CW将为你存储文件。
不知怎的,我错过了这种联系,当我意识到发生了什么事时,它几乎让我蒙羞。我在这里回答这个问题,以便它可以帮助其他一些在黑暗中迷失的可怜的灵魂。并向世人展示我的无知。 :/
答案 1 :(得分:0)
我不知道CarrierWave。但是你是返回zip文件对象。它是你想传递的,还是你希望传递文件的名称?或者你想要提取文件并将提取的文件路径传回去吗?