#iphone #ruby-on-rails
#iPhone #ruby-on-rails
Вопрос:
Я загрузил PNG-изображение размером 16 кБ в базу данных photos на моем сервере разработки Rails, используя attachment_fu, и я могу просматривать PNG-изображение в браузере, указывающем на сервер разработки Rails. Так что эта часть работает нормально.
Когда я загружаю файл в свое приложение для iPhone и просматриваю данные, полученные методом «didReceiveData», у меня возникают две проблемы:
- Иногда удаляются последние 4 КБ файла PNG, поэтому получается только 12 КБ.
- В других случаях отправляется только 4 КБ или 8 кБ, а полученные части изображения PNG не входят в эти 4 или 8 кБ.
Первое происходит, когда я изменяю параметр в send_file (например, buffer_size на 16 КБ) и перезапускаю сервер. Это заставляет меня думать, что на сервере разработки происходит какое-то кэширование. В противном случае, если я не изменил параметр и не перезапустил сервер, произойдет # 2 выше.
Чтобы попытаться исправить 1, остановив кэширование на сервере разработки, я
A) добавлен в config/environments/development.rb
:
config.cache_classes = true
config.action_controller.perform_caching = false
Б) и добавил следующий код в контроллер:
response.headers.delete("Pragma")
response.headers.delete('Cache-Control')
response.headers["Expires"] = "#{1.year.ago}"
Ниже приведен код, в котором send_file
вызывается в контроллере:
user_photo = Photo.find_by_id(334)
@p = user_photo
send_file("#{RAILS_ROOT}/public" @p.public_filename,
:disposition => 'inline',
:encoding => 'binary',
:type => @p.content_type,
:stream => false,
:filename => URI.encode(@p.filename),
:buffer_size => 4096
)
Мой метод connectionDidFinishLoading выглядит следующим образом:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
[theConnectionData release];
}
Есть идеи, почему изображение PNG урезается на 4 КБ или время от времени файл вообще не отправляется?
Комментарии:
1. Способ отправки файлов существенно отличается в зависимости от вашего веб-сервера и стека промежуточного программного обеспечения. Это происходит в вашей среде разработки, верно? Используете ли вы WEBrick, Mongrol, другое?
Ответ №1:
Я думаю, это тот случай, когда не используется
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
Отправляется после успешного завершения загрузки соединения.
Я думаю, было бы лучше проверять размер завершенного изображения по завершении, а не беспокоиться о настройках сервера.
Комментарии:
1. Я использую connectionDidFinishLoading. Я добавил этот код выше. Есть ли что-то, чего мне не хватает при использовании connectionDidFinishLoading? Должен ли я просматривать данные, полученные в connectionDidFinishLoading вместо didReceiveData?
2. Понял. connectionDidFinishLoading сообщает мне, что все данные были получены.