2012-09-30 2 views
1

xml 파일을 Amazon S3 서버에 업로드하려고합니다. 루비의 코드는 다음과 같습니다. -Amazon S3 서버에 파일 업로드시 데이터가 "먹습니다"

AWS::S3::S3Object.store("dir/data.xml", 
          "#{xml.target!}", 
          "bucket", 
          :access => :private, 
          :content_type => 'text/xml') 

xml은 RSS 피드 파일입니다. 업로드 된 파일을 서버에서 다운로드 할 때 파일의 마지막 줄이 파일에 없습니다. 선택적 파라미터 콘텐츠 유형 분리

</rss> 

출력에 영향을 미치지 않는다. 그러나 추가 문자를 삽입하기 위해 데이터 구성 요소를 변경하면 누락 된 문자가 핵심으로 표시됩니다.

AWS::S3::S3Object.store("dir/data.xml", 
           "#{xml.target!}   ", 
           "bucket", 
           :access => :private, 
           :content_type => 'text/xml') 

내 문제를 해결할 수 있지만 제작 과정에서이 코드를 사용하기를 꺼립니다. 또한 무엇이 잘못 될지 알고 싶습니다.

사실 로컬 컴퓨터의 파일에 쓸 때 올바르게 작동합니다.

file = File.new("/path/feed.xml", "w") 
    file.write(xml.target!) 
    file.close 

업데이트 :뿐만 아니라 csv 파일을 업로드하는 동안이 같은 문제에 직면하고있다. 매우 큰 파일의 경우 더 많은 데이터가 잘립니다. xml 파일의 경우 닫는 rss 태그뿐만 아니라 몇 가지 다른 태그도 빠져 있습니다. 마찬가지로 CSV 파일도 마찬가지입니다. 어떻게 해결할 수 있습니까?

+0

가 줄 바꿈에 파일 끝을합니까?를 아마도 뭔가가 라인 버퍼링이 잘못되었을 수 있습니까? –

+0

예, 줄 바꿈으로 끝납니다. –

+0

이 문제를 해결하는 방법에 대한 아이디어가 있습니까? –

답변

2

xml.target 보내기! 데이터가 어떻게 든이 문제를 야기했기 때문입니다. 이 문제를 해결하기 위해 StringIO.new를 사용하여 새 문자열을 만들었습니다. CSV를 들어

, 나는 이런 식으로 뭔가를 사용 : -

csv_string = StringIO.new(csv_string)