2011-04-10 1 views
0

attachment_fu를 사용하여 Rails 개발 서버의 사진 데이터베이스에 16kB PNG 이미지를 업로드했고 브라우저에서 Pails 이미지를 볼 수 있습니다. 섬기는 사람. 그래서 그 부분은 잘 작동합니다. , 때로는 PNG 파일의 마지막 4 킬로바이트를 떨어send_file in rails는 클라이언트에게 보낼 때 16KB 파일의 마지막 4KB를 버립니다.

  1. : 내 아이폰 응용 프로그램에 파일을 다운로드하는 방법 'didReceiveData "에서 수신 된 데이터를 볼 때

    , 나는이 문제가 따라서 12kB 만 수신됩니다.

  2. 그 외의 경우에는 4kB 또는 8kB 만 전송되고 PNG 이미지의 일부는 4kB 또는 8kB가 수신되지 않습니다.

첫 번째는 send_file (buffer_size를 16kB로 변경)에서 매개 변수를 변경하고 서버를 다시 시작하면 발생합니다. 이것은 저에게 개발 서버로 계속해서 어떤 종류의 캐싱이 있다고 생각하게 만듭니다. 그렇지 않으면 매개 변수를 변경하지 않고 서버를 다시 시작하면 위의 # 2가 발생합니다. 시도하고, 내가)

했습니다 개발 서버에서 캐싱을 중지하여 일을 해결하기 위해

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

파일 전송 방식은 웹 서버 및 미들웨어 스택에 따라 크게 다릅니다. 이것은 개발 환경에서 발생하고 있습니다. WEBrick, Mongrol을 사용하고 있습니까? – MDaubs

+0

WEBrick을 사용하고 있습니다. –

답변

1

이, 내 생각, 연결이 성공적으로로드 완료되면 전송

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

을 사용하지 않는 경우입니다.

서버 설정에 대한 걱정보다 완성 된 이미지 크기를 확인하는 것이 더 좋을 것이라고 생각합니다.

+0

connectionDidFinishLoading을 사용하고 있습니다. 위의 코드를 추가했습니다. connectionDidFinishLoading의 사용법에서 빠진 것이 있습니까? didReceiveData 대신 connectionDidFinishLoading 내에서받은 데이터를 조사해야합니까? –

+0

알았습니다. connectionDidFinishLoading은 모든 데이터가 수신되었음을 알립니다. –

관련 문제