2012-09-18 3 views
1

나는 노출 된 API를 통해 다양한 언어로 일부 모바일 앱과 상호 작용하는 Rails 앱을 보유하고 있습니다.S3 버킷에서 직접 종이 클립 첨부 파일을 만들 수 있습니까?

모바일 앱은 동영상 파일을 Rails 앱에 보내야하지만 파일 크기가 너무 커서 직접 API에 첨부하여 Paperclip으로 첨부 할 수 없습니다.

휴대 기기의 S3에 파일을 직접 업로드 한 다음 첨부 파일과 연결되지 않은 입력란을 사용하여 업로드 한 파일의 URL을 API로 보내고 있습니다.

Rails 컨트롤러가 upload_url 값을 포함하는 작성 또는 업데이트 요청을받는 지점에서 지정한 위치에 파일과 함께 Paperclip 첨부 파일을 만들고 싶습니다.

S3에서 파일을 읽고 다시 저장하면 클립 클립 첨부 파일을 만들 수 있지만 시작점과 끝점이 S3의 동일한 버킷 일 때 불필요한 많은 데이터가 전송되는 것처럼 보입니다.

내 질문은 어떻게 든 S3 보석을 사용하여 이동하거나 파일 이름을 Paperclip에서 인식 할 수있는 첨부 파일로 변경할 수 있습니까?

답변

2

첨부 파일을 모델링하는 방법 (s3의 경로 및 URL 체계와 같은)에 따라 다르지만 가장 일반적인 시나리오에서 파생되어야하는 필수 특성 (파일 이름 포함)을 사용하여 개체를 간단히 만들 수 있습니다 upload_url 값 그런 다음 업로드 레코드는 원래 Paperclip을 통해 만들어진 것처럼 액세스 할 수 있습니다.

1.9.3p194 :069 > u = Attachment.new 
=> #<Attachment id: nil, type: nil, attachable_id: nil, attachable_type: nil, attachment_file_name: nil, attachment_content_type: nil, attachment_file_size: nil, attachment_updated_at: nil, created_at: nil, updated_at: nil> 
1.9.3p194 :070 > u.attachment_file_name = 'fdssfd.txt' 
=> "fdssfd.txt" 
1.9.3p194 :071 > u.attachment 
=> /system/assets/images/paperclip/development//original/fdssfd.txt 
1.9.3p194 :072 > u.save 
    (0.3ms) BEGIN 
    SQL (0.5ms) INSERT INTO `attachments` (`attachable_id`, `attachable_type`, `attachment_content_type`, `attachment_file_name`, `attachment_file_size`, `attachment_updated_at`, `created_at`, `type`, `updated_at`) VALUES (NULL, NULL, NULL, 'fdssfd.txt', NULL, NULL, '2012-09-18 14:24:26', NULL, '2012-09-18 14:24:26') 
[paperclip] Saving attachments. 
    (1.4ms) COMMIT 
=> true 
1.9.3p194 :073 > u.attachment 
=> /system/assets/images/paperclip/development/5/original/fdssfd.txt 
+0

감사합니다. 이것은 매우 만족스러운 해결책으로 느껴지지 않지만 내 유일한 옵션 일 수 있으며 데이터를 내 서버로 전송하고 S3로 되돌려 보내지 않아도됩니다. – kpopper

+0

계속 살펴볼 것이지만 이런 식으로 끝날 수도 있습니다. 건배. – kpopper

+0

업로드 된 파일의 URL 또는 파일의 데이터를 클립 클립에 어떻게 첨부합니까? – rigyt

관련 문제