9

アプリケーションの添付ファイルにペーパークリップを使用しています。たくさんの古いデータのインポートスクリプトを書いていますが、ディスク上のファイルからペーパークリップオブジェクトを作成する方法がわかりません。私の最初の推測は、モックCGIマルチパートオブジェクトを作成することですが、それは少し大雑把な解決策のようで、最初の試みは失敗しました。to_tempfileメソッドを正しく取得できなかったためだと思います。

これを行う正しい方法はありますか?かなり簡単なはずのようです。

4

2 に答える 2

16

同じことをしたことはわかっています。各ファイルへのパスからFileオブジェクトを作成し、それをimage属性に割り当てたと思います。ペーパークリップはそのファイルで実行されます。

thing.image = File.new("/path/to/file.png")
thing.save
于 2009-12-07T23:24:00.087 に答える
15

これはローカルファイルには適していますが、リモートファイルには適していません。画像のアップロードにペーパークリップを使用するアプリがあります。これらの画像はAmazons3に保存されています。とにかく、インポートする必要のある古いデータがいくつかあったので、次のことを試しました。

thing.image = open('http://www.someurl.com/path/to/image.jpg')
thing.save

ファイルが小さい場合(たとえば、10K未満)、openuriはstringioオブジェクトを返し、私のファイルはstringio.txtとしてs3に保存されます。

ファイルが約10Kより大きい場合、openuriはTempFileオブジェクトを返します。ただし、s3のファイル名は一意になりますが、実際にはimage.jpgの元のファイル名とは関係ありません。

次の手順で問題を解決できました。

remote_photo = open('http://www.someurl.com/path/to/image.jpg')
def remote_photo.original_filename;base_uri.path.split('/').last; end   
thing.image = remote_photo
thing.save
于 2010-05-06T17:51:54.947 に答える