0

send_fileを使用して、複数の画像で構成されるzipファイルをRailsサーバーからiPhoneにダウンロードしています。Railsでは、rubyzipから来ていると思うZip::ZipOutputStream.put_next_entryを使用しています。iPhoneでは、ZipArchiveを使用して、UnzipFileToDataを使用してファイルを複数のファイルに解凍してメモリに戻しています。私が遭遇した問題は、画像の下部がランダムな量で黒くなっていることです。一部の画像には黒く塗りつぶされた部分がなく、他の画像には画像の下部の半分までが黒く塗りつぶされています。画像は小さく、サイズは約20KBです。

私が抱えている問題は、レールからiPhoneまでのパスのどの部分が、画像の下部が黒く塗りつぶされているのかがわからないことです。

 1.  I've ftp'ed the zipped file from my Rails server to my Mac and unzipped them and the images look fine, which means the images are getting zipped on the Rails server correctly.
 2.  I've tried reversing the order that the images are added to the zip file, but the same amounts of the bottom of the images are blacked out.
 3.  Could it be that different compression levels are being used?  

マルチファイルのzipファイルから解凍された画像が画像の下部のランダムな部分を失っている理由を誰かが知っていますか?

4

1 に答える 1

1

ここで解決策を見つけました。私のレールコードはもともと次のようでした:

 Zip::ZipOutputStream.open(zipped_file.path) do |z|
    user_photo_array.each do |file|
        z.put_next_entry(File.basename(file))
        z.print IO.read(file)
    end
 end

上記のリンクが示しているように、バイナリ ファイルでは IO.read に問題があるため、リンクの提案に従い、IO.read を File.open(file, "rb"){ |f| に置き換えました。f.read}として

 Zip::ZipOutputStream.open(zipped_file.path) do |z|
    user_photo_array.each do |file|
        z.put_next_entry(File.basename(file))
        z.print File.open(file, "rb"){ |f| f.read }
    end
 end

そしてそれは問題を解決しました!

于 2013-03-06T18:16:54.137 に答える