2013-03-06 2 views
0

Я использую send_file для загрузки заархивированного файла, состоящего из нескольких изображений, от моего сервера rails до моего iPhone. В Rails я использую Zip :: ZipOutputStream.put_next_entry, который, я думаю, исходит от rubyzip. На iPhone я использую ZipArchive для распаковки файла обратно в несколько файлов в память с помощью UnzipFileToData. Проблема, с которой я сталкиваюсь, заключается в том, что нижние части изображений являются черными случайными суммами. На некоторых изображениях нет черных участков, у других - до половины нижней части изображения, затемненного. Изображения небольшие, размером около 20 КБ.скачать с рельсов на iphone zipped file missing parts

Проблема в том, что я не могу понять, какая часть пути от рельсов к 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? 

Кто-нибудь есть какие-либо идеи, почему распакованные образами из нескольких файлов архивных файла будет отсутствовать случайные части нижней части изображения?

+0

Возможно, алгоритм zip, используемый в приложении rails, не совместим с iphones? –

+0

Я использовал unzip -vl photos.zip и получил для метода Def I: N. Вы знаете, где я могу найти различные методы сжатия zip? –

+0

Вы загрузили его на свой телефон с помощью WIFI? Я знаю, что многие провайдеры gsm имеют собственную интерпретацию того, как интернет должен работать и ограничивать размер запросов. –

ответ

1

Обнаружено решение here. Мой рельсы код первоначально выглядел как:

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 (файл, «радиоканал ") {| 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 

, и это исправило проблему!