我正在将内容上传到托管的CMS。他们提供了一个Ruby Gem,允许我以编程方式上传大量内容。我能够通过编辑他们的一个脚本来上传我的内容,但我无法让脚本在上传中包含我的文件。这是我成功使用的脚本:
#!/usr/bin/env ruby -rubygems
require File.join(File.dirname(__FILE__), 'authentication')
require "csv" # faster_csv (ruby 1.9)
lines = CSV.read(File.join(File.dirname(__FILE__), 'karaoke.csv')) # Exported an Excel file as CSV
lines.slice!(0) # remove header line
collection = StorageRoom::Collection.find('my collection ID')
Song = collection.entry_class
lines.each do |row|
karaoke = Song.new(:artist => row[0], :song => row[1], :genre => row[2])
if karaoke.save
puts "Misuero Karaoke Latino saved: #{karaoke.artist}, #{karaoke.song}, #{karaoke.genre} "
else
puts "Misuero Karaoke Latino could not be saved: #{karaoke.errors.join(', ')}"
end
end
根据他们的示例,这是执行文件上传的脚本:
#!/usr/bin/env ruby -rubygems
require File.join(File.dirname(__FILE__), 'authentication')
path = ::File.expand_path(File.join(File.dirname(__FILE__) + '..', 'spec', 'fixtures', 'image.png'))
collection = StorageRoom::Collection.find('my collection ID')
# Upload File
entry = collection.entry_class.new(:name => "StorageRoom Logo", :file => StorageRoom::File.new_with_filename(path))
if entry.save
puts "Entry saved (#{entry[:@url]})"
puts "URL of the uploaded file is #{entry.image.url}"
puts "URL of the automatically generated thumbnail is #{entry.image.url(:thumbnail)}" # Multiple Image Versions can be specified in the interface
else
puts "Entry could not be saved: #{entry.errors.join(', ')}"
end
我想混合两个脚本,所以我只运行一个,但我无法让文件上传部分工作。我正在尝试上传.mov。文件应该在哪里与脚本相关?我怎样才能使它们被正确命名?如何编辑脚本以便它执行多个文件?我该如何合并脚本?
答案 0 :(得分:3)
文件应该在哪里与脚本相关?
File.dirname(__FILE__)
返回当前文件的目录,File.join
允许您将其他目录添加到路径('..'
当然是指父目录),File.expand_path
确保这是一条绝对而非相对的道路。
如何才能正确命名?
如果不知道你的目录结构,基本上不可能回答这个问题。感受一下尝试使用ruby控制台并尝试使用the core file methods。
如何编辑脚本以便它执行多个文件?
您可能希望将# Upload File
下方的部分循环到文件名数组上。您可能会发现Dir.entries
/ Dir.glob
对于生成此数组非常有用:Dir api docs。
我该如何合并脚本?
一般来说:连接文件然后删除重复(例如,身份验证,分配集合var)。您的具体实现将取决于Song类的结构(例如,如果这是对象,您将文件附加到您可能只需将:file => StorageRoom::File.new_with_filename(path)
添加到第一个脚本中的new
语句)和/或csv (例如,如果这包含文件的路径,您可以通过它而不用摆弄Dir.glob
等。