問題タブ [rubyzip]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
485 参照

ruby-on-rails - RubyZipはJPGを「JPGではなく、0x89で始まる」に変換します

RubyZip を使用して一連の画像 (Paperclip を使用してアップロード) を圧縮し、ユーザーがそれらを 1 つのファイルにダウンロードできるようにしています。画像を開くまではすべて正常に動作します。表示されず、Ubuntu で試してみると、次のエラー メッセージが表示されます。

したがって、ユーザーは正しいユーザー名のファイルが入力されたフォルダーをダウンロードしていますが、コンピューターが「形式」を表示できないため、開くと表示できません。

コントローラ:

ありがとう!

0 投票する
3 に答える
5025 参照

ruby-on-rails - nokogiriとrubyzipでdocxを編集する方法

rubyzip と nokogiri を組み合わせて .docx ファイルを編集しています。rubyzip を使用して .docx ファイルを解凍し、nokogiri を使用して word/document.xml ファイルの本文を解析および変更していますが、最後に ruby​​zip を閉じるたびにファイルが破損し、開くことができません。修理してください。デスクトップで .docx ファイルを解凍し、word/document.xml ファイルを確認すると、コンテンツは変更後の内容に更新されていますが、他のすべてのファイルが台無しになっています。誰かがこの問題について私を助けてくれますか? これが私のコードです:

0 投票する
1 に答える
2435 参照

ruby-on-rails-3 - ペーパークリッププロセッサがファイルを見つけることができません

以前:作成または更新後にペーパークリップの添付ファイルでモデルメソッドを実行する(ペーパークリップのコールバックは機能しないようです)

編集(その日遅く) 私は自分の問題を理解しました。プロセッサは、更新されたファイルを処理しているようですが、処理が完了するまでファイルを保存しません。添付ファイルのパスにはまだ実際には何も保持されていないため、Zip::ZipFileを「attachment.path」ではなく「file」を開くように変更しました。これで最初の問題が修正されました。今、私は追跡する必要がある他の問題を抱えています。しかし、以下の答えはほとんど正しいです。

編集(2011年1月31日):

そこで、必要なすべてのアクションを実行するアタッチメント用のプロセッサを作成するようにアドバイスしました。これまでのところ、機能するはずです。明らかに、プロセッサが起動し、すべての初期化作業を実行します。しかし、アップロードされたzipファイルにアクセスしたいところに到達すると、ファイルが見つからないというエラーが表示されます。私のプロセッサのコードは以下のとおりです。

そして、これが私が得るエラーの内容です:

私の知る限り、適切な場所でファイルを探していますが、ファイルにアクセスするためにファイルがまだアップロードされていないようです。私の知る限り、Paperclipは、添付ファイルの処理を試みる前に、添付ファイルがアップロードされるのを認識して待機するのに十分なほど賢いです。誰かが私がここで間違っていることを見つけることができますか?

どうもありがとう。

古いもの:

Rails3とPaperclipを使用してフォトギャラリーアプリを開発しています。管理者は、ギャラリーを作成し、多数の画像を含むzipファイルをアップロードできます。

私がしたいこと:

  1. ギャラリー情報とzipファイルを入力してフォームにアップロードします。
  2. 「ギャラリーの作成」ボタンを押します。
  3. フォームの投稿、ギャラリーの保存、zipファイルがアップロードされます。
  4. zipファイルがアップロードされたら、メソッド:extract_photosを実行します(ところで、このコードは機能します)。4.a. このメソッドの最後に、zipファイルが破棄されます。
  5. 管理者は、すべての写真が含まれているギャラリーページにリダイレクトされます(ギャラリーには多くの写真があります)。

私はこれをいくつかの異なる方法で機能させようとしました。

以前、管理者が:extract_photosメソッドを実行するリンクをクリックできるようにするコントローラーメソッドを作成しました。これは私のコンピューターでは機能しましたが、何らかの理由でサーバーがクライアントのコンピューターでこれをルーティングするのに問題がありました。だから、それはダメです。それに、それは醜いやり方だと思いました。

最近、コールバックメソッドを使ってみました。after_saveは、フォームPOSTを中断し、ファイルがアップロードされず、:extract_photosメソッドがファイルを見つけることができないため、機能しませんでした。

Paperclipgithubページでコールバックメソッドをチェックアウトしました。コールバックについて説明しています。

後処理ステップの前後に、Paperclipはいくつかのコールバックを使用してモデルにコールバックし、モデルが処理ステップを変更またはキャンセルできるようにします。コールバックは、「before_post_process」と「after_post_process」(各添付ファイルの処理の前後に呼び出されます)、および添付ファイル固有の「beforepost_process」と「afterpost_process」です。コールバックは、通常のActiveRecordコールバックにできるだけ近づけることを目的としているため、beforeフィルターでfalseを返すと(具体的には、nilを返すことは同じではありません)、後処理ステップは停止します。アフターフィルターでfalseを返しても何も停止しませんが、必要に応じてモデルとアタッチメントにアクセスできます。

before_post_processとafter_post_processを使用してみましたが、プロセスを実行するファイルが見つからないため、これらのメソッドが呼び出されるまでにファイルがアップロードされていないことは明らかです(これは奇妙だと思います)。さらに、beforepost_processとafterpost_processを試してみると、NoMethodErrorが発生します。

では、添付ファイルが作成または更新された後、ファイルがアップロードされた後、適切な場所でメソッドを呼び出すにはどうすればよいですか?

アップデート

以下のコードを試して、抽出メソッドコードをプロセッサのmakeメソッドに移動しました。プロセッサを作成しようとして以前よりも遠くまで進んだのですが、それでもうまくいきません。アップロードされたファイルを処理のために開こうとするとすぐに、ファイルが存在しないという例外がスローされます。命名スキームは正しく、すべてですが、プロセスがトリガーされる前に何もアップロードされていません。なぜこれが起こっているのか誰かが知っていますか?

0 投票する
2 に答える
3763 参照

file - ZipEntry (RubyZip、Paperclip、Rails 3) から直接 (ディスクに書き込むことなく、正しいコンテンツ タイプの) 一時ファイル オブジェクトを取得するにはどうすればよいですか?

現在、画像ファイルを zip ファイルから直接モデルに添付しようとしています (つまり、最初にディスクに保存せずに)。ZipEntry を Tempfile または File に変換してメモリに保存し、別のメソッドまたはオブジェクトを処理する方法を知っているオブジェクトに渡すためのより明確な方法があるようです。

これが私のコードです:

しかし、問題は、photo.image がモデルへの (ペーパークリップによる) 添付ファイルであり、何かを添付ファイルとして割り当てるには、何かが File オブジェクトである必要があることです。ただし、ZipEntry をファイルに変換する方法を理解することはできません。ファイルを開いたり作成したりする唯一の方法は、そのパスに文字列を使用することです。つまり、ファイルを特定の場所に抽出する必要があります。本当に、それはばかげているようです。ZipEntry ファイルを出力ストリームに抽出して、そこでファイルに変換できないのはなぜですか?

究極の質問: Zip ファイルから ZipEntry を抽出し、それを直接 File オブジェクトに変換 (または直接 Paperclip オブジェクトとして添付) できますか? それとも、最終的にはそのバージョンが削除されますが、アタッチする前にハードドライブに実際に保存するのに行き詰まっていますか?

UPDATE ブルーベリー畑のおかげで、私は自分の解決策に少し近づいたと思います. 追加したコード行は次のとおりです。これにより、必要な一時ファイル/ファイルが得られます。

しかし、私のPhotoオブジェクトは渡されたファイルを受け入れませんimage/jpeg。実際、content_typeファイルを確認すると、application/x-empty. これは、出力ストリームを取得すると、ファイルの末尾にタイムスタンプが追加されているように見えるため、最終的にimagename.jpg20110203-20203-hukq0n. 編集:また、作成する一時ファイルにはデータが含まれておらず、サイズが0です。したがって、これは答えではない可能性があります。

では、次の質問: これを取得して画像/jpeg ファイルを取得する方法を知っている人はいますか?

更新

私はこれでもう少し遊んでいます。出力ストリームは進むべき道ではなく、むしろ入力ストリームです(これは常に私を混乱させてきました)。ZipEntry で get_input_stream を使用して、ファイル内のバイナリ データを取得します。これを (ファイル オブジェクトとして) ペーパークリップの添付ファイルに入れる方法を理解する必要があると思います。ZipInputStream を添付ファイルに直接プッシュしようとしましたが、もちろんうまくいきません。抽出された ZipEntry をファイルとしてキャストしようとした人が誰もいないとは本当に信じがたいです。これが悪いプログラミング手法と見なされる理由はありますか? 一時ファイルのディスク書き込みをスキップすることは完全に受け入れられ、Zip アーカイブ管理などでサポートされているように思えます。

とにかく、問題はまだ残っています:

入力ストリームをファイル オブジェクト (または一時ファイル) に変換する方法はありますか? できれば、ディスクに書き込む必要はありません。

0 投票する
2 に答える
764 参照

ruby - RubyzipとネイティブOSの圧縮

圧縮を実行するためにネイティブOSライブラリを使用する場合と比較して、rubyzipを使用してデータを圧縮する場合のパフォーマンスの違いは何でしょうか。URLから圧縮するデータをフェッチし、ZipOutputStreamを使用してzipファイルを作成しています。ネイティブOSユーティリティの場合、zipツールの使用を考えています。両方のアプローチの長所と短所を聞いていただければ幸いです。

0 投票する
1 に答える
139 参照

ruby - ファイルを圧縮するとデータが失われる

Windowsでrubyzipを使用してディレクトリを圧縮しています。アーカイブを解凍すると、一部のファイルが以前よりも小さくなっています。

zipはロスレス操作である必要があるので、なぜこれが発生しているのか疑問に思います。

これが私が使用しているコードです:

問題が発生している特定のファイルは、Firefoxプロファイルからのものです。cert8.dbおよびkey3.db

同じファイルを使用してLinuxのjrubyで同じコードを実行すると、期待どおりに機能します。すべてのファイルは同じサイズです。

これがWindowsで問題になる理由はありますか?

0 投票する
1 に答える
289 参照

ruby - rubyzipコーチング

上記のコードでは、Zip::ZipOutputStream.open(file_path) do |z|. |z|意味がわかりません。|z| とは 参照する?たとえば |z| を変更できますか 例は |changez| です。?

ここで完全なコードを取得しました http://blog.devinterface.com/2010/02/create-zip-files-on-the-fly/しかし、do |z| の 1 行目を理解できません。.

0 投票する
1 に答える
2797 参照

ruby-on-rails - その場で画像のzipを生成するときのrubyzipエラー:中央ディレクトリの終わりの署名が見つかりません

ユーザーに送信される画像のコレクションからzipファイルを生成しています。

このページの例とほぼ同じコードを使用しています。

http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/

ローカルの開発ボックスではまったく問題なく動作しますが、ステージング サーバーで実行すると、長さゼロの zip ファイルを開こうとすると次のエラーが表示されます。

「中央ディレクトリの終わりの署名が見つかりません」

明らかに、開発マシンで正常に動作しているときに、どこで問題が発生したかをトラブルシューティングするのは困難です!

乾杯、グレアム

0 投票する
3 に答える
2056 参照

ruby - Ruby 1.9.2 でうまく動作する zip ライブラリはどれですか?

Ruby 1.8.7 で ruby​​zip gem を使用していましたが、ruby 1.9.2 では ruby​​zip がうまく動作しないと聞きました。

Ruby 1.9.2 でうまく動作する zip ライブラリは何ですか?

0 投票する
7 に答える
21119 参照

ruby-on-rails - rubyzip の使用エラー - 読み込むファイルがありません -- zip/zip

この件に関して別のスレッドがあることは知っていますが、すべてのソリューションを使用した後でもこの問題に直面しています。zip ファイルを生成する他の方法はありますか? Ubuntu システム コマンドを使用できますか?

やった

私は持っている

私のコントローラーで

しかし、私はまだ同じエラーを受け取ります - ロードするそのようなファイルはありません - zip/zip UbuntuでRails 3.0.5を使用してruby 1.8.7とruby 1.9.2の両方で試しました

手伝っていただけませんか?ありがとう。