2009-12-07 5 views
9

내 응용 프로그램에서 첨부 파일에 클립을 사용하고 있습니다. 내가 옛날 데이터의 무리에 대한 가져 오기 스크립트를 쓰고있어,하지만 디스크에 파일에서 클립 클립 개체를 만드는 방법을 모르겠습니다. 내 첫 번째 추측은 모의 CGI multipart 객체를 만드는 것입니다.하지만 이것은 약간의 원유 솔루션처럼 보입니다. 그리고 초기 시도는 실패했습니다. 왜냐하면 to_tempfile 메소드가 올바르지 않았기 때문입니다.레일 및 클립으로 이전 데이터 가져 오기

올바른 방법이 있습니까? 그것은 꽤 쉬워야 만하는 것처럼 보입니다.

답변

16

나는 똑같은 짓을 했어. 나는 방금 각 파일에 대한 경로에서 File 객체를 만들고 그것을 이미지 속성에 할당했다고 생각한다. 종이 클립은 해당 파일에서 실행됩니다 :

thing.image = File.new("/path/to/file.png") 
thing.save 
+1

참고는 시도 아마도 다음에 일할 수있는 가장 단순한 것. – Zak

+0

나는 당신만큼 놀랐다. – Ben

+0

예 -이 절대적으로 바위 –

14

이 로컬 파일에 대한 잘 작동하지만, 원격 파일에 대해 잘 작동하지 않습니다. 이미지를 업로드하기 위해 클립 클립을 사용하는 앱이 있습니다. 그 이미지들은 amazon s3에 저장됩니다.

thing.image = open('http://www.someurl.com/path/to/image.jpg') 
thing.save 

파일이 작은 경우 (예를 들어, 이하 10K) 다음 openuri는 stringio 개체를 반환하고 내 파일에 저장된 얻을 것이다 : 어쨌든, 내가 가져올 필요가 오래된 데이터를했다 그래서 나는 다음 시도 s3 as stringio.txt

파일이 약 10K보다 클 경우, openuri는 TempFile 개체를 반환합니다. 독특한 존재하지만, 정말 다음을 수행하여 문제를 해결할 수 있었다

가 image.jpg의 원래 파일 이름에 관련되지 그러나 S3에 파일 이름이 끝나는 : 자기에

remote_photo = open('http://www.someurl.com/path/to/image.jpg') 
def remote_photo.original_filename;base_uri.path.split('/').last; end 
thing.image = remote_photo 
thing.save 
+0

+1 와우 .. 너는 내 하루를 .. – bragboy

+0

Thx. 'original_filename'에 대해 :) –