根据这篇文章:http ://en.wikipedia.org/wiki/HFS_Plus ,您应该能够使用任何字符,包括文件名中的 NUL。但操作系统 API 可能会出于遗留原因限制某些字符。
它可能是服务器或客户端问题,尝试调试您的应用程序并检查其中提供的文件名request.request_parameters
是否应包含有效的文件名。
如果您要在 URL 中使用上传的文件,您应该在上传之前对其进行音译,这也可以解决您的问题。为此,您可以使用此扩展程序:
module TransliteratePaperclip
def transliterate_file_name(paperclip_file)
paperclip_file=[paperclip_file] unless paperclip_file.is_a?(Enumerable)
paperclip_file.each do |file|
filename=read_attribute("#{file}_file_name")
if filename.present?
extension = File.extname(filename).gsub(/^\.+/, '')
filename = filename.gsub(/\.#{extension}$/, '')
self.send(file).instance_write(:file_name, "#{filename.parameterize}.#{extension.parameterize}")
end
end
end
end
# include the extension
ActiveRecord::Base.send(:include, TransliteratePaperclip)
将此代码放入/config/initializers/paperclip_transliterate.rb
回形针模型中:
before_post_process { |c| transliterate_file_name(:file) }
其中:file
是由 定义的属性has_attached_file
。