2011-09-15 4 views
5

Paperclip을 사용하여 다음과 같이 URL에서 이미지를 가져 오려고합니다.클립 : 이미지를 프로그램 방식으로 지정하고 이름을 설정합니다.

require 'open-uri' 

user.photo = open(url) 

문제는 다음 파일 이름이 'open-uri20110915-4852-1o7k5uw'와 비슷하다는 것입니다. user.photo에서 파일 이름을 변경할 수있는 방법이 있습니까?

Paperclip이 내 파일을 S3에 저장하고 있기 때문에 초기 할당에서 원하는 파일 이름을 설정하면 이미지가 오른쪽 S3 키에 업로드됩니다. 이런 식으로 :

user.photo = open(url), :filename => URI.parse(url).path 

답변

6

URL (foo.jpg)에서 가져온 다음 위의 instance_write 메서드를 사용하여 인스턴스에 다시 씁니다.

+0

그리고 'open (url)'을 사진에 지정하면 어떻게됩니까? 나는 사진이 이미 S3에있는 기존 사용자와 함께이 작업을 시도했습니다. 이제'u.photo_file_name'은 새 이름을 반환하지만'u.photo (: original)'는 여전히'u.photo.path'뿐만 아니라 오래된 S3 URL을 가지고 있습니다. 그리고 S3의 파일은 움직이지 않았습니다. –

+1

이미지가있는 경우 "photo.reprocess!"를 호출해야 할 수 있습니다. Paperclip에서 저장소 백엔드 (S3)를 업데이트하도록하십시오. 그렇지 않으면, 위의 첫 번째 저장하기 전에 작동하고 올바르게 저장을 수행 할 때 S3에 올바르게 저장해야합니다 –

+0

경우에 따라 paperclip은 문자를 대체하기 위해 파일 이름을 변경하므로주의해야합니다. . – James

5
io = open(url) 
def io.original_filename; base_uri.path.split('/').last; end 

이렇게하면 파일 이름이 URL에있는 파일 이름으로 설정됩니다.

+0

저는 최근에이 문제에 다시 휩쓸 렸고 이번에는이 접근법을 더 채택해야했습니다. 다음은 블로그 게시물입니다. http://www.illuminatedcomputing.com/posts/2013/06/paperclip-with-server-side-files/ –

관련 문제