2011-04-10 38 views
0

我上傳了一個16 kB PNG圖像到我的Rails開發服務器上的照片數據庫使用attachment_fu,我可以在指向Rails開發的瀏覽器中查看PNG圖像服務器。這部分工作正常。send_file在rails下載最後4KB的16KB文件發送到客戶端

當我將文件下載到我的iPhone應用程序,並期待在方法「didReceiveData」接收到的數據,我有兩個問題:

  1. 有時最後4 KB的PNG文件被刪除,所以只收到12 kB。
  2. 其他時間,僅發送4kB或8kB,並且部分PNG圖像不在接收到的4kB或8kB中。

第一次發生在我更改send_file中的參數(如buffer_size爲16kB)並重新啓動服務器時。這讓我覺得開發服務器上會有某種緩存。否則,如果我沒有更改參數並重新啓動服務器,則出現上述#2。

嘗試採用在開發服務器停止緩存,我已經

A)1固定加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截斷或零星的文件沒有得到所有發送的任何想法?

+0

根據您的Web服務器和中間件堆棧,發送文件的方式會有很大不同。這發生在你的開發環境中,對吧?你在使用WEBrick,Mongrol,其他嗎? – MDaubs 2011-04-10 01:28:35

+0

我正在使用WEBrick。 – 2011-04-10 02:50:09

回答

1

此,我想,是不是使用

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

當連接完成加載成功發送的情況。

我認爲完成後檢查完成的圖像大小會更好,而不必擔心服務器設置。

+0

我正在使用connectionDidFinishLoading。我已經添加了上面的代碼。在使用connectionDidFinishLoading時是否存在缺少的內容?我應該看看在connectionDidFinishLoading而不是didReceiveData中收到的數據嗎? – 2011-04-10 02:48:31

+0

明白了。 connectionDidFinishLoading告訴我所有的數據都已收到。 – 2011-04-10 02:59:05