1

これがペーパークリップの問題かどうかはわかりません。gitlab で試してみましたが、同じことが起こりました。

Rails で記述された iOS アプリのバックエンドがあり、ファイル名に @ 文字を含む画像ファイルをアップロードすると、アップロード時に消去されます。

aaa@2x.jpg

として保存されます

aaa2x.jpg

また、~ は _ に変換されます。

これは、iOS アプリが Retina 対応の画像に @2x プレフィックスが付いていると想定しているため、問題です。

アップロード後にファイル名を正規表現し、データベースで変更してファイルの名前を変更できますが、それは奇妙なハックのように思えます。そもそもファイル名を適切に保存するにはどうすればよいですか?

4

1 に答える 1

1

この記事: http://en.wikipedia.org/wiki/HFS_Plusによると、ファイル名には NUL を含む任意の文字を使用できるはずです。ただし、OS 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

于 2012-07-10T09:26:41.490 に答える