当发送到客户端时,rails中的send_file丢弃最后4KB的16KB文件

时间:2011-04-10 01:21:00

标签: iphone ruby-on-rails

我使用attachment_fu将16 kB PNG图像上传到我的Rails开发服务器上的照片数据库中,我可以在指向Rails开发服务器的浏览器中查看PNG图像。这部分工作正常。

当我将文件下载到我的iPhone应用程序,并查看方法“didReceiveData”中收到的数据时,我有两个问题:

  1. 有时会丢弃PNG文件的最后4 kB,因此只接收12 kB。
  2. 其他时候,只发送4 kB或8 kB,部分PNG图像不在此接收的4或8 kB中。
  3. 第一种情况发生在我将send_file中的参数(如buffer_size更改为16kB)并重新启动服务器时。这让我觉得开发服务器正在进行某种缓存。否则,如果我没有更改参数并重新启动服务器,则会发生上面的#2。

    要通过在开发服务器中停止缓存来尝试修复1,我

    A)已添加到config/environments/development.rb

       config.cache_classes = true
       config.action_controller.perform_caching = false
    

    B)并在控制器中添加以下代码:

      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图像会被4kB截断或者偶尔会发送文件的任何想法?

1 个答案:

答案 0 :(得分:1)

我想,这是不使用

的情况
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

连接成功加载后发送。

我认为最好在完成后检查完成的图像大小,而不是担心服务器设置。